题解 | #月总刷题数和日均刷题数#
月总刷题数和日均刷题数
https://www.nowcoder.com/practice/f6b4770f453d4163acc419e3d19e6746
这道题主要是增加了一个汇总项,通常我们不会在SQL语句中增加汇总项,所以这道题多少有点画蛇添足。
这个题想完整的写出来需要蛮多知识点和测试
比较核心的是 知道LAST_DAY是返回每月最后一天的意思,加入day,可以知道这个月有多少天,max本来可以不加,因为有了汇总项目,不加的话汇总项的日期可能就会取到最后一个日期,可能就是30,如果加入了,会在返回的列表中获取最大的,必然位31。
另外就是要知道with rollup的存在。
还有汇总的字段构造也需要多种方式。基本上不把数据下载到本地,自己慢慢研究是不能完全吃懂这道题的。
select IFNULL(submit_month,"2021汇总") as submit_month, month_q_cnt ,avg_day_q_cnt from ( select DATE_FORMAT(submit_time, '%Y%m') submit_month, count(submit_time) month_q_cnt, round(count(question_id)/MAX(day(LAST_DAY(submit_time))), 3) avg_day_q_cnt from practice_record where YEAR(submit_time)='2021' group by DATE_FORMAT(submit_time, "%Y%m") with rollup)t