题解 | #根据指定记录是否存在输出不同情况#

根据指定记录是否存在输出不同情况

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()*/
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;


数据库刷题题解 文章被收录于专栏

数据分析数据库题目练习题解

全部评论
为啥你的level没在group by 里就不会报错,不是说group by里要出现select里除聚合函数外的所有列
点赞 回复 分享
发布于 2022-05-06 23:07

相关推荐

评论
5
收藏
分享
牛客网
牛客企业服务