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

月总刷题数和日均刷题数

http://www.nowcoder.com/practice/f6b4770f453d4163acc419e3d19e6746

该题目主要考察的应该是group by函数和union来连接结果。

SQL的思路:按照每个月份来分组,通过月份来获取每个月份有多少天;对于汇总的结果,则可以使用类似行列转换的方式来实现。 还是上代码吧!

SELECT  T.month submit_month, T.month_q_cnt, ROUND(T.month_q_cnt/DATE_FORMAT(last_d, '%d'), 3) avg_day_q_cnt
FROM (
SELECT DATE_FORMAT(submit_time, '%Y%m') month,COUNT(question_id) month_q_cnt,LAST_DAY(submit_time) last_d
FROM practice_record
WHERE DATE_FORMAT(submit_time, '%Y')='2021'
GROUP BY DATE_FORMAT(submit_time, '%Y%m'),LAST_DAY(submit_time)) T
UNION ALL
SELECT CASE WHEN T22.submit_month IS NOT NULL THEN CONCAT(T22.submit_month,'汇总') ELSE NULL END submit_month, T22.month_q_cnt, ROUND(T22.avg_day_q_cnt, 3)
FROM (
SELECT SUBSTRING(T1.month, 1, 4) submit_month, SUM(T1.month_q_cnt) month_q_cnt, SUM(T1.avg_day_q_cnt) avg_day_q_cnt
FROM (
SELECT  T.month, T.month_q_cnt, T.month_q_cnt/31 avg_day_q_cnt
FROM (
SELECT DATE_FORMAT(submit_time, '%Y%m') month,COUNT(question_id) month_q_cnt
FROM practice_record
WHERE DATE_FORMAT(submit_time, '%Y')='2021'
GROUP BY DATE_FORMAT(submit_time, '%Y%m')) T) T1
GROUP BY SUBSTRING(T1.month, 1, 4)) T22
ORDER BY submit_month

PS:为啥临时表使用T1,T22呢?主要是看了今年的MSI,觉得有点意思。

顺便提一嘴,牛客的结果判定感觉不够智能,不加ORDER BY函数的时候,结果的内容是没错的,但是结果的顺序跟所谓的预期结果不一致,测试用例显示不通过。回头再细细品了一下题目,并没有要求结果按照月份顺序。因此觉得这样体验不是很好。

全部评论

相关推荐

09-24 11:06
辽宁大学 市场
深莞高速因为台风都封掉了,华为协商后,特地开通华为通道,凭工卡可以正常通勤......
崔喃喃:“台风您好,19级专家已驳回了您18级台风的OA登陆申请”
投递华为技术有限公司等公司10个岗位
点赞 评论 收藏
分享
09-19 13:59
门头沟学院 Java
用微笑面对困难:Trae一下,如果真成了,他用了直接发字节起诉代码版权,,这个代码不商用是没问题的如果没成也是情理之中的。
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

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