题解 | #根据指定记录是否存在输出不同情况#
根据指定记录是否存在输出不同情况
http://www.nowcoder.com/practice/f72d3fc27dc14f3aae76ee9823ccca6b
/*条件1: 只要有一个0级用户未完成试卷数大于2时
输出1:所有0级用户的试卷未完成数和未完成率
条件2:条件1不存在时
输出2:所有用户的试卷未完成数与未完成率
注意:存在有人没有作答,但是是已注册用户,所以如果使用sum(case when submit_time is null then 1 else 0 end)时会出现数据统计失误
所以,尽量使用count()*/
输出1:所有0级用户的试卷未完成数和未完成率
条件2:条件1不存在时
输出2:所有用户的试卷未完成数与未完成率
注意:存在有人没有作答,但是是已注册用户,所以如果使用sum(case when submit_time is null then 1 else 0 end)时会出现数据统计失误
所以,尽量使用count()*/
with a as ( select u.uid, u.level , count(start_time) - count(submit_time)as inc_cnt ,round(((count(start_time) - count(submit_time))/count(*)),3) as rate , count(start_time) as total_cnt from exam_record e right join user_info u on e.uid = u.uid group by uid ) select uid, inc_cnt,rate from a where exists (select uid from a where a.level = 0 and inc_cnt > 2) and a.level = 0 union all select uid, inc_cnt, rate from a where not exists (select uid from a where a.level = 0 and inc_cnt > 2) and total_cnt > 0 order by rate;
数据库刷题题解 文章被收录于专栏
数据分析数据库题目练习题解