• 【牛客】SQL139 近三个月未完成试卷数为0的用户完成情况-窗口函数


    描述

    现有试卷作答记录表exam_record(uid:用户ID, exam_id:试卷ID, start_time:开始作答时间, submit_time:交卷时间,为空的话则代表未完成, score:得分):

    iduidexam_idstart_timesubmit_timescore
    1100690032021-09-06 10:01:012021-09-06 10:21:0284
    2100690012021-08-02 12:11:012021-08-02 12:31:0189
    3100690022021-06-06 10:01:012021-06-06 10:21:0181
    4100690022021-05-06 10:01:012021-05-06 10:21:0181
    5100690012021-05-01 12:01:01(NULL)(NULL)
    6100190012021-09-05 10:31:012021-09-05 10:51:0181
    7100190032021-08-01 09:01:012021-08-01 09:51:1178
    8100190022021-07-01 09:01:012021-07-01 09:31:0081
    9100190022021-07-01 12:01:012021-07-01 12:31:0181
    10100190022021-07-01 12:01:01(NULL)(NULL)

    找到每个人近三个有试卷作答记录的月份中没有试卷是未完成状态的用户的试卷作答完成数,按试卷完成数和用户ID降序排名。由示例数据结果输出如下:

    uidexam_complete_cnt
    10063

    解释:用户1006近三个有作答试卷的月份为202109、202108、202106,作答试卷数为3,全部完成;用户1001近三个有作答试卷的月份为202109、202108、202107,作答试卷数为5,完成试卷数为4,因为有未完成试卷,故过滤掉。

    1. select
    2. uid,count(act_time) as exam_complete_cnt
    3. from
    4. (select
    5. uid,left(start_time,7) as act_time,submit_time,
    6. dense_rank() over(partition by uid order by left(start_time,7) desc) as rnk
    7. from
    8. exam_record)t1
    9. where rnk<=3
    10. group by uid
    11. having count(act_time)=sum(if(submit_time is null,0,1))
    12. order by exam_complete_cnt desc,uid desc
  • 相关阅读:
    No module named ‘_ctypes‘ 错误解决
    ad18学习笔记十二:如何把同属性的元器件全部高亮?
    TiDB Lightning 术语表
    【YAML】【YAML的实践】【YAML的使用学习记录】
    什么是Java?java是用来做什么的?
    ELK日志分析系统
    p5.js map映射
    rocketMQ是如何利用MQFaultStrategy规避延迟故障的?
    【设计模式-2】策略模式 - 避免冗余的if-else判断
    QT 简易计算器
  • 原文地址:https://blog.csdn.net/weixin_60200880/article/details/136484677