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

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

https://www.nowcoder.com/practice/f72d3fc27dc14f3aae76ee9823ccca6b

-- 1.存在0级用户未完成试卷数大于2,输出每个0级别用户的 试卷未完成数和未完成率
-- 2.若不存在,则输出所有作答记录的用户的这两个指标。
-- 字段:uid、incomplete_cnt、incomplete_rate
-- tb1:链接表
with tb1 as(
    select uid,level,start_time,submit_time,score
    from exam_record right join user_info using(uid)
),
-- tb2:求取总量用户
tb2 as(
    select uid,round(count(if(submit_time is null,start_time,null)),3) as  incomplete_cnt,
    round(count(if(submit_time is null,start_time,null))/count(start_time),3) as incomplete_rate,
    max(level) as level,
    count(submit_time) as complete_cnt
    from tb1
    group by uid
)

-- tb3:情况1(level=0,存在未完成数>2)只求取level=0
select uid,incomplete_cnt,round(if(incomplete_rate is not null,incomplete_rate,0),3) AS incomplete_rate
from tb2
WHERE EXISTS(SELECT uid FROM tb2 WHERE level='0' AND incomplete_cnt>2) #出现level=0且存在incomplete_cnt>2时
AND level='0' #输出level=0的用户未完成数和未完成率
UNION ALL 
-- 情况2(level=0,不存在 未完成数>2)输出有作答记录的用户的这两个指标。
select uid,incomplete_cnt,round(if(incomplete_rate is not null,incomplete_rate,0),3) AS incomplete_rate 
from tb2
where not exists(select uid from tb2 where level= '0' and incomplete_cnt>2)
AND  complete_cnt+incomplete_cnt >=1 -- 完成次数>1
# order by incomplete_rate;
ORDER BY incomplete_rate

# 注意:有作答记录 即 不管是否完成

全部评论

相关推荐

好久没来牛客了,今天面试了一个实习生,感觉对方形象乱糟糟的,头发像鸡窝,像刚睡醒就来面试了,第一印象直接大打折扣,感觉我没有受到应有的尊重,再加上对方业务能力也一般,我直接挂掉;大家面试的时候还是好好收拾一下自己吧,争取给面试官留下个好印象,面试这东西还是存在眼缘的
MinJerous:更在乎本质,应该看候选人是否和岗位需要的能力匹配。洗脸/不洗头都无所谓吧,说不定人家刚刚通宵准备,就是为了这场面试呢?你挂掉他核心原因还是他能力不行,而不是形象。就算形象好点,能力不行你敢给过吗,不怕后面+1质疑你
投递牛客等公司10个岗位 > 牛客激励计划
点赞 评论 收藏
分享
刘湘_passion:太强了牛肉哥有被激励到
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务