题解 | #满足条件的用户的试卷完成数和题目练习数#

满足条件的用户的试卷完成数和题目练习数

http://www.nowcoder.com/practice/5c03f761b36046649ee71f05e1ceecbf

要求:请你找到高难度SQL试卷得分平均值大于80并且是7级的红名大佬,统计他们的2021年试卷总完成次数和题目总练习次数,只保留2021年有试卷完成记录的用户。结果按试卷完成数升序,按题目练习数降序。

思路如下:要求先让你找到满足条件的红名大佬。然后看结果示例是两列,而两列分别来源于两个表,一般我遇到这种情况会分开构建每一列然后用两表连接的方式得到最终结果。那么我们接下来只需要一步一步操作即可。

  1. 查询 高难度SQL试卷得分平均值大于80并且是7级的红名大佬 uid
select er.uid
from exam_record er
join examination_info ei on er.exam_id =ei.exam_id 
join user_info ui on er.uid=ui.uid
where tag='SQL' 
and difficulty= 'hard'
and level >= 7  #感觉大于七级也应该是红名 所以加了大于号
group by uid 
having avg(score)>80
  1. 查询 红名大佬 2021年 试卷总完成次数
select uid , count(submit_time) exam_cnt
from exam_record
where year(submit_time) = 2021
and submit_time is not null
and uid in(
    select er.uid
    from exam_record er
    join examination_info ei on er.exam_id =ei.exam_id 
    join user_info ui on er.uid=ui.uid
    where tag='SQL' 
    and difficulty= 'hard'
    and level >= 7
    group by uid 
    having avg(score)>80
)
group by uid
  1. 查询 红名大佬 2021年 题目总练习次数
select uid, count(submit_time) question_cnt
from practice_record 
where year(submit_time) = 2021
and uid in(
    select er.uid
    from exam_record er
    join examination_info ei on er.exam_id =ei.exam_id 
    join user_info ui on er.uid=ui.uid
    where tag='SQL' 
    and difficulty= 'hard'
    and level >= 7
    group by uid 
    having avg(score)>80
)
group by uid

  1. 连接表2 表3,用ifnull 添加0 ,得到最终结果
select e.uid ,exam_cnt , ifnull(question_cnt,0) question_cnt
from (
    select uid , count(submit_time) exam_cnt
    from exam_record
    where year(submit_time) = 2021
    and submit_time is not null
    and uid in(
        select er.uid
        from exam_record er
        join examination_info ei on er.exam_id =ei.exam_id 
        join user_info ui on er.uid=ui.uid
        where tag='SQL' 
        and difficulty= 'hard'
        and level >= 7
        group by uid 
        having avg(score)>80
    )
    group by uid
) e
left join (
    select uid, count(submit_time) question_cnt
    from practice_record 
    where year(submit_time) = 2021
    and uid in(
        select er.uid
        from exam_record er
        join examination_info ei on er.exam_id =ei.exam_id 
        join user_info ui on er.uid=ui.uid
        where tag='SQL' 
        and difficulty= 'hard'
        and level >= 7
        group by uid 
        having avg(score)>80
    )
    group by uid
) q
on e.uid =q.uid
order by exam_cnt asc , question_cnt desc
全部评论

相关推荐

吐泡泡的咸鱼:我也工作了几年了,也陆陆续续面试过不少人,就简历来说,第一眼学历不太够,你只能靠你的实习或者论文或者项目经历,然后你没有论文,没有含金量高的比赛和奖项,只能看实习和项目,实习来说,你写的实习经历完全不清楚你想找什么工作?行研?数据分析?且写的太少了,再看项目,这些项目先不说上过大学读过研究生的都知道很水,然后对你想找的岗位有什么帮助呢?项目和实习也完全不匹配啊,你好像在努力将你所有的经历都放在简历里想表现你的优秀,但是对于你想找的岗位来说,有什么用呢?最后只能获得岗位不匹配的评价。所以你需要明白你想要找的岗位要求是什么,是做什么的,比如产品经理,然后再看你的经历里有什么匹配的上这个岗位,或者对这个岗位以及这个岗位所在的公司有价值,再写到你的简历上
点赞 评论 收藏
分享
评论
6
收藏
分享

创作者周榜

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