题解 | #月总刷题数和日均刷题数#
月总刷题数和日均刷题数
https://www.nowcoder.com/practice/f6b4770f453d4163acc419e3d19e6746
SELECT ifnull(submit_month,'2021汇总'), month_q_cnt, CASE WHEN submit_month is null THEN round(month_q_cnt/31, 3) ELSE round(month_q_cnt/days, 3) END FROM(SELECT date_format(submit_time, '%Y%m') submit_month, day(last_day(max(submit_time))) days, count(*) month_q_cnt FROM practice_record pr WHERE year(submit_time) = '2021' GROUP BY submit_month WITH ROLLUP) t
子查询用于筛选 每个符合时间要求的作答月份下的 答题总数 以及 该月天数,并用with rollup语句对2021年的总体情况进行汇总求和。
注意求每日天数的时候,可以对每个日期使用last_day()函数求出该月的最后一天的日期,并用day()函数提取日期,作为该月的总天数。
外层查询利用分组结果以及CASE...WHEN语句,分情况求出不同月份的统计值并输出。
按理来讲我这个代码好像漏掉了按月份排序的一步,但是也通过了,就懒得改了(不是)