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

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

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

#1.计算所有用户的答题完成情况
with t1 as(
select 
    b.uid,
    count(start_time) as total_cnt,
   COUNT(start_time)-COUNT(submit_time) as incomplete_cnt,
    ROUND((COUNT(start_time)-COUNT(submit_time)) /COUNT(*),3) incomplete_rate,
    level
from 
    exam_record as a 
right join(
    select 
        uid,
        level
    from 
        user_info
) as b
on a.uid = b.uid
group by uid
order by incomplete_rate asc)

#2.结果1:有满足条件的0级用户
select 
    uid,
    incomplete_cnt,
    incomplete_rate
from 
    t1
where exists(
    select 
        uid
    from 
        t1
    where 
        level = 0
        and incomplete_cnt > 2
)and level = 0
union all
#3.结果2:没有满足条件的0级用户,输出所有用户的答题情况
select 
    uid,
    incomplete_cnt,
    incomplete_rate
from 
    t1
where not exists(
    select 
        uid
    from 
        t1
    where 
        level = 0
        and incomplete_cnt > 2
)and total_cnt > 0
order by  incomplete_rate

这题好几个坑!

(1)第一步的时候我们要建立一个所有用户答题完成情况表。因为有聚合运算,我很自的想到把exam_record作为主表并命名为a,select a.uid这个时候结果是错的,因为题目要求的是所有0级用户的未完成情况,所以要select user_info的所有0级用户id。

而且,计算‘未完成率’的时候,注意检查不管你用哪种公式,分母不能为0否则会返回null!

(2)第二步建立所有0级用户的答题情况表——这一步就简单了,相信大家都没问题

(3)输出所有有作答记录的用户答题情况表(我漏看了这个重要条件),注意这些用户的total_cnt > 0否则我们要过滤掉哦~

tips:这一题两个结果1.2是互斥的,所以用 union 和 union all 都对

全部评论

相关推荐

不愿透露姓名的神秘牛友
06-27 20:15
还能挽救吗?找同学帮忙看了一下 字节怎么能如此对我
牛客26396789...:你这是严重红线,被发现你自己永远进不去,你那个同学直接走人,你还敢宣扬
点赞 评论 收藏
分享
大方的大熊猫准备进厂:1.教育背景:你希望从事什么专业的工作你的主修课就是什么;成绩优秀是你应该做的,没什么可描述的,成绩不优秀也许人家在大学忙着创业呢?(成绩优秀不一定是好事,只能说明多元化的大学你上成了高中,没有真正上明白大学,反而体现了你死板,不爱社交,没有别的突出能力) 2.实践经历:你想表达的意思没有说清楚。你是说你会个性化服务,还是你有实习经历。如果没有带来,经济收益,表彰,更好的发展前景,那你还不如说说提升了自己哪些技能。你说有人给你送锦旗我都能明白你优秀,但是你说你会xxxx,你说这话谁信,证据呢。 3.入伍经历:你描述的就是你的工作职责或者你应该做的,并没有体现出来你把这个事情做好了,而且入伍经历并不能证明你能干好你要应聘的工作,不如只写经历其余所有内容都不写。 4.荣誉技能:重点突出一下,但不要过多描述,这些荣誉的含金量懂得都懂。 重点:你要应聘什么工作(具体岗位,实习生不具体),你的期望薪资
点赞 评论 收藏
分享
06-10 21:15
门头沟学院 Java
宁阿:好多这种没🧠的公司,他们估计都不知道毕业的人不能给安排实习岗
实习吐槽大会
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务