题解 | #SQL 34.每份试卷每月作答数和截止当月的作答总数。#

每份试卷每月作答数和截止当月的作答总数。

http://www.nowcoder.com/practice/5f1cbe74c682485aa73e4c2b30f04a62

明确题意:

统计每份试卷每月作答数和截止当月的作答总数;


问题分解:

  • 统计每份试卷每月被作答数,生成子表 t_exam_month_cnt:
    • 统计每份试卷被作答月份,生成子表t_exam_record_month:
      • 提取每次作答的月份:DATE_FORMAT(start_time, "%Y%m") as start_month
    • 按试卷ID和月份分组: GROUP BY exam_id, start_month
    • 统计每份试卷每月被作答次数:SELECT exam_id, start_month, count(1) as month_cnt
  • 统计截止当月的作答总数:
    • 按试卷分区按月份排序累积求和:SUM(month_cnt) over(PARTITION BY exam_id ORDER BY start_month) as cum_exam_cnt

细节问题:

  • 表头重命名:as

完整代码:

SELECT exam_id, start_month, month_cnt,
    SUM(month_cnt) over(PARTITION BY exam_id ORDER BY start_month) as cum_exam_cnt
FROM (
    SELECT exam_id, start_month, count(1) as month_cnt
    FROM (
        SELECT exam_id, DATE_FORMAT(start_time, "%Y%m") as start_month
        FROM exam_record
    ) as t_exam_record_month -- 每份试卷被作答月份
    GROUP BY exam_id, start_month
) as t_exam_month_cnt; -- 每份试卷每月被作答数
SQL进阶 文章被收录于专栏

SQL进阶step by step

全部评论

相关推荐

notbeentak...:孩子,说实话,选择很重要,可能你换一个方向会好很多,但是现在时间不太够了,除非准备春招
点赞 评论 收藏
分享
评论
点赞
1
分享

创作者周榜

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