当前位置: 首页 > news >正文

SQL183 近三个月未完成试卷数为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,因为有未完成试卷,故过滤掉。

select uid, count(start_time) as exam_complete_cnt
from    (select * ,dense_rank() over(partition by uid order by date_format(start_time,"%Y%m") desc) as rankingfrom exam_record) a
where ranking <=3 
group by uid
having count(score) = count(uid)
order by exam_complete_cnt desc,uid desc

🧩 核心解释:DENSE_RANK() 排名逻辑(重点!)

DENSE_RANK():相同月份并列排名,不跳号

DENSE_RANK() OVER (PARTITION BY uid ORDER BY DATE_FORMAT(start_time, '%Y%m') DESC
) AS ranking

✅ 作用:

为每个用户的每条考试记录,按 年月(倒序) 打上一个“月度排名”。

http://www.lryc.cn/news/622679.html

相关文章:

  • 力扣(LeetCode) ——142. 环形链表 II(C语言)
  • JavaWeb 30 天入门:第十一天 ——Java 反射机制详解
  • 【环境变量与程序地址空间详解】
  • vue3动态的控制表格列的展示简单例子
  • 从希格斯玻色子到 QPU:C++ 的跨维度征服
  • KingbaseES高可用架构深度解析——从读写分离到异地灾备的全方位守护
  • 【C++】异常详解(万字解读)
  • 力扣hot100 | 矩阵 | 73. 矩阵置零、54. 螺旋矩阵、48. 旋转图像、240. 搜索二维矩阵 II
  • [1Prompt1Story] 生成行为控制器 | 语义向量重加权(SVR)
  • 第七十五章:AI的“思维操控师”:Prompt变动对潜在空间(Latent Space)的影响可视化——看懂AI的“微言大义”!
  • Netty 的 Select/Poll 机制核心实现主要在 NioEventLoop 的事件循环
  • Horse3D游戏引擎研发笔记(六):在QtOpenGL环境下,仿Unity的材质管理Shader绘制四边形
  • Nginx域名和IP兼容双方的API地址
  • JavaScript forEach() 与 for 循环 return 行为全解析
  • 1083. 数列极差问题
  • 2025暑期—10ROS系统实现-计算图
  • Linux sar命令详细使用指南
  • 【CV 目标检测】Fast RCNN模型①——与R-CNN区别
  • 【洛谷刷题】用C语言和C++做一些入门题,练习洛谷IDE模式:分支机构(一)
  • VUE+SPRINGBOOT从0-1打造前后端-前后台系统-用户管理
  • 基于Python的课程作业管理系统 Python+Django+Vue.js
  • .net印刷线路板进销存PCB材料ERP财务软件库存贸易生产企业管理系统
  • 《Python 单例模式(Singleton)深度解析:从实现技巧到争议与最佳实践》
  • pytest tmpdir fixture介绍(tmpdir_factory)(自动在测试开始前创建一个临时目录,并在测试结束后删除该目录)
  • C#单元测试(xUnit + Moq + coverlet.collector)
  • STM32 软件I2C读写MPU6050
  • 云服务平台主流架构的相关知识体系剖析
  • 完整设计 之 智能合约系统:主题约定、代理协议和智能合约 (临时命名)----PromptPilot (助手)答问之2
  • 智能合约:区块链时代的“数字契约革命”
  • C++ STL-string类底层实现