SQL36 统计有未完成状态的试卷的未完成数和未完成率
题目主要信息:
- 统计有未完成状态的试卷的未完成数 incomplete_cnt 和未完成率 incomplete_rate
- 未完成率保留三位小数
思路拆解:
- 判断试卷未完成的条件为 submit_time 是否为 NULL,此处通过 IF(submit_time IS NULL, 1, 0) 获取每个提交记录的未完成状态。知识点:IF, IS NULL
- 对上述中间结果,基于 exam_id 维度做聚合统计,SUM(是否未完成) 可获得每个试卷的未完成总数,SUM(是否未完成) / COUNT(1) 可获得试卷的未完成率;通过 ROUND 函数保留三位小数。知识点:SUM, COUNT, GROUP BY, ROUND
- 使用 HAVING 语句对计算完的结果进行过滤筛选,根据题意,我们要保留未完成数量大于 0 的所有结果。知识点:HAVING
代码:
SELECT
exam_id,
SUM(incomplete),
ROUND(SUM(incomplete) / COUNT(1), 3) AS incomplete_rate
FROM
(
SELECT
exam_id,
IF(submit_time IS NULL, 1, 0) AS incomplete
FROM
exam_record
) AS exam_info
GROUP BY
exam_id
HAVING
incomplete_rate > 0