牛客网刷题遇到的问题。
解释:2021年8月共有2次刷题记录,日均刷题数为2/31=0.065(保留3位小数);2021年9月共有3次刷题记录,日均刷题数为3/30=0.100;
我写的代码是这样的
但就是一直报错,深深的无力感,请各位看一下
牛客网刷题遇到的问题。
试了下代码是没有问题,看错误提示是因为你的mysql版本应该是5.7.5以上的高版本,而5.7.5以上的高版本实现了对功能依赖的检测,默认的sql_mode中包含了ONLY_FULL_GROUP_BY属性,这个属性保证了select到的列都在group by中出现,即MySQL会拒绝执行 select list、HAVING condition或ORDER BY list引用既不在GROUP BY子句中被命名,也不在功能上依赖于GROUP BY列(由GROUP BY列唯一确定)的未聚合列的查询,在5.7.5之前,MySQL没有检测到功能依赖项,only_full_group_by在默认情况下是不启用的。关于前5.7.5行为的描述,请参阅MySQL 5.6参考手册
解决方式一:
-- 先查询SQL_MODE
select @@GLOBAL.sql_mode;
-- 根据查询结果查找结果中是否包含了only_full_group_by模式,如果有的话就要把它去掉
set @@GLOBAL.sql_mode="查询结果中其余剩余的mode"
方式二:
修改mysql配置文件,通过手动添加sql_mode的方式强制指定不需要ONLY_FULL_GROUP_BY属性
-- 找到sql_mode = ,查看是否存在ONLY_FULL_GROUP_BY属性,如果存在,清除掉
sql_mode="清除ONLY_FULL_GROUP_BY属性后的剩余不变"
方式三:
不用改配置,修改SQL语句即可:
SELECT
ANY_VALUE(DATE_FORMAT( submit_time, '%Y%m' )) AS submit_month,
ANY_VALUE(count( question_id )) AS month_q_cnt,
ANY_VALUE(COUNT( question_id ) / DAY (LAST_DAY( submit_time ))) AS avg_day_q_cnt
FROM
practice_record
GROUP BY
DATE_FORMAT(submit_time,'%Y%m');