题解 | #统计作答次数#
统计作答次数
https://www.nowcoder.com/practice/45a87639110841b6950ef6a12d20175f
select count(start_time) as total_pv, count(submit_time) as complete_pv, count(distinct if(submit_time is not null, exam_id, null)) as complete_exam_cnt from exam_record
题目:有一个试卷作答记录表exam_record,请从中统计出总作答次数total_pv、试卷已完成作答数complete_pv、已完成的试卷数complete_exam_cnt。
总作答次数:有几个开始时间
已完成作答次数:有几个提交时间
已完成的试卷数,即完成了哪些卷子。
注意:中途退出的为未完成状态,其交卷时间和份数为NULL。
重点:已完成试卷数(complete_exam_cnt):count(distinct【考虑一种卷子很多人做的情况需要数据去重】if(submit_time is not null,exam_id,null) 如果提交时间非空,则为已完成状态,返回卷子ID,进入count计算;若为空值,则为未完成状态,返回空值,不进入计算。
疑点:这里我先用了select子查询求完成卷子的列,再结合count函数计算,但是是错误的。count(select distinct exam_id from exam_record where submi_time is not null) 不知道为什么,经常出现这样的问题,难道是聚合函数不能和子查询一起用吗?