题解 127 | #月总刷题数和日均刷题数#

【场景】:总和单个、ONLY_FULL_GROUP_BY

【分类】:分组查询、last_day、any_value

分析思路

难点:

1.如何解决 ONLY_FULL_GROUP_BY 报错

2。如何计算某个月有多少天,使用 last_day

为什么会出现 ONLY_FULL_GROUP_BY 报错

ONLY_FULL_GROUP_BY的语义就是确定select list中的值要么是来自于聚合函数(sum、avg、max等)的结果,要么是来自于group by list中的表达式的值,在计算日均刷题数的时候,使用了day( last_day( submit_time)),这个数据是临时定义的,它即不来自聚合函数又不来自group by list,所以会报错。

如何解决报错

MySQL提供了 any_value() 函数来抑制ONLY_FULL_GROUP_BY值被拒绝

any_value()会选择被分到同一组的数据里第一条数据的指定列值作为返回数据。在计算日均刷题数的时候,选择submit_month作为返回数据,这样就忽略了分母中的day( last_day( submit_time)),从而避免ONLY_FULL_GROUP_BY 报错。

求解代码

方法一:

# MySQL提供了any_value()函数来抑制ONLY_FULL_GROUP_BY值被拒绝。
(select
    date_format(submit_time,'%Y%m') as submit_month,
    any_value(count(question_id)) as month_q_cnt,
    any_value(round(count(question_id)/day(last_day(submit_time)),3)) as avg_day_q_cnt 
from practice_record
where year(submit_time) = 2021
group by submit_month)
union all
(select
    '2021汇总' as submit_month,
    count(question_id) as month_q_cnt,
    round(count(id)/31,3) as avg_day_q_cnt
from practice_record
where year(submit_time) = 2021)
order by submit_month
全部评论

相关推荐

09-01 11:31
门头沟学院 Java
buul:七牛云的吧,感觉想法是好的,但是大家没那么多时间弄他这个啊。。。不知道的还以为他是顶尖大厂呢还搞比赛抢hc,只能说应试者的痛苦考察方是无法理解的,他们只会想一出是一出
点赞 评论 收藏
分享
哇哇的菜鸡oc:他这不叫校招offer,而是实习offer
点赞 评论 收藏
分享
评论
2
4
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务