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

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

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

#这个题首先我right join 了user表,主要是他的需求当中如果满足“任意一个0级用户未完成试卷数大于2时,输出每个0级用户的试卷未完成数和未完成率”的条件的时候,他需要显示所有0级的用户统计信息(有些0级用户可能没有提交记录,但是也要显示)

我的大体思想是,先不管他给的条件,先把每个用户的指标先统计出来,然后通过条件过滤

第一层:right join user表,计算出每个用户的incompetent_cnt(这里采用的是用户在exam_record的记录总数allNum- 用户已经submit的记录数)

第二层:根据第一层结果计算incomplete_rate的值,isKeep 是用来判断这条记录是否保持的标记,如果计算结果1则保留,0则不保留,这会在第三层过滤,这个值的运算思路:开窗统计是否有0级用户incompetent_cnt > 2 ,如果有:则只保留0级用户的数据(包括exam表中没有提交记录的用户),如果没有:则只保留在exam表中有提交记录的用户,所以整个外层是一个if,

第三层:统计排序格式化即可。

select
    d.uid,
    d.incomplete_cnt,
    format(d.incomplete_rate,3) as incomplete_rate
from
(
    select
        c.uid,
        c.incomplete_cnt,
        if(c.incomplete_cnt = 0,0,incomplete_cnt/submitNum) as incomplete_rate,
        if(sum(case when c.incomplete_cnt > 2 && c.level = 0 then 1 else 0 end) over() > 0,case when c.level=0 then 1 else 0 end,case when c.submitNum > 0 then 1 else 0 end)as isKeep
    from 
    (
        select
            b.uid,
            sum(case when a.uid is not null then 1 else 0 end) - sum(case when a.submit_time is not null then 1 else 0 end) as incomplete_cnt,
            sum(case when a.uid is not null then 1 else 0 end) as submitNum,
            b.level
        from exam_record a right join user_info b on a.uid = b.uid

        group by b.uid  
    ) c
) d where d.isKeep = 1
order by d.incomplete_rate

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
正在热议
更多
# 一张图晒出你司的标语 #
4388次浏览 77人参与
# AI面会问哪些问题? #
28345次浏览 569人参与
# 厦门银行科技岗值不值得投 #
8124次浏览 188人参与
# 你的实习产出是真实的还是包装的? #
20455次浏览 343人参与
# 找AI工作可以去哪些公司? #
9446次浏览 251人参与
# 春招至今,你的战绩如何? #
66535次浏览 586人参与
# 开放七大实习专项,百度暑期实习值得冲吗 #
15439次浏览 223人参与
# 从事AI岗需要掌握哪些技术栈? #
9292次浏览 325人参与
# 中国电信笔试 #
32089次浏览 295人参与
# 你做过最难的笔试是哪家公司 #
34555次浏览 249人参与
# 投递几十家公司,到现在0offer,大家都一样吗 #
341004次浏览 2175人参与
# 哪些公司真双非友好? #
69720次浏览 289人参与
# 阿里笔试 #
179086次浏览 1318人参与
# 机械人避雷的岗位/公司 #
62710次浏览 393人参与
# 小马智行求职进展汇总 #
25141次浏览 80人参与
# 第一份工作一定要去大厂吗 #
14938次浏览 122人参与
# 金三银四,你的春招进行到哪个阶段了? #
22299次浏览 284人参与
# 担心入职之后被发现很菜怎么办 #
291391次浏览 1210人参与
# 为了减少AI幻觉,你注入过哪些设定? #
26288次浏览 310人参与
# 应届生第一份工资要多少合适 #
20697次浏览 86人参与
# HR最不可信的一句话是__ #
6374次浏览 114人参与
# 沪漂/北漂你觉得哪个更苦? #
10098次浏览 194人参与
牛客网
牛客网在线编程
牛客网题解
牛客企业服务