题解 | #统计复旦用户8月练题情况#

统计复旦用户8月练题情况

http://www.nowcoder.com/practice/53235096538a456b9220fce120c062b3

过滤取值后再返回初始表格取值

当两个临时表在联结时都包含同一个过滤规则时,将这个规则提取到外面来写,而不是分别写在两个临时表代码中。

select
    uni_de.device_id, 
    uni_de.university,
    case when question_cnt is null then 0 else question_cnt end as q_cnt,
    case when right_cnt is null then 0 else right_cnt end as r_cnt
from 
-- 先把复旦大学的所有学生的id找出来并放在一边
    (select distinct device_id ,university 
     from user_profile where university='复旦大学') as uni_de
left outer join
-- 再按照要求检索数据
    (select 
        a.device_id as device_id, 
        university, 
        count(question_id) as question_cnt,
        sum(case when result='right' then 1 else 0 end)as right_cnt
    from 
        user_profile as a 
        left join question_practice_detail as b
        on a.device_id = b.device_id
    where
        university = '复旦大学'
        and date like '%08%'
    group by a.device_id) as c
on 
    uni_de.device_id = c.device_id;

看看别人的答案。

select up.device_id, up.university,
    count(question_id) as question_cnt,
    sum(if(qpd.result='right', 1, 0)) as right_question_cnt
from user_profile as up

left join question_practice_detail as qpd
  on qpd.device_id = up.device_id and month(qpd.date) = 8

where up.university = '复旦大学'
group by up.device_id

在这里有很多问题,我不是很明白,又有点明白。但是还是学习到了一点:

当两个临时表在联结时都包含同一个过滤规则时,将这个规则提取到外面来写,而不是分别写在两个临时表代码中。

MySQL试题答案解析 文章被收录于专栏

MySQL在线编程重点试题解析

全部评论

相关推荐

2024-12-27 23:45
已编辑
三江学院 Java
程序员牛肉:死局。学历+无实习+项目比较简单一点。基本就代表失业了。 尤其是项目,功能点实在是太假了。而且提问点也很少。第一个项目中的使用jwt和threadlocal也可以作为亮点写出来嘛?第二个项目中的“后端使用restful风格”,“前端采用vue.JS”,“使用redis”也可以作为亮点嘛? 项目实在是太简单了,基本就是1+1=2的水平。而你目标投递的肯定也是小厂,可小厂哪里有什么培养制度,由于成本的问题,人家更希望你来能直接干活,所以你投小厂也很难投。基本就是死局,也不一定非要走后端这条路。可以再学一学后端之后走测试或者前端。 除此之外,不要相信任何付费改简历的。你这份简历没有改的必要了,先沉淀沉淀
点赞 评论 收藏
分享
菜鸡29号:根据已有信息能初步得出以下几点: 1、硕士排了大本和大专 2、要求会多语言要么是招人很挑剔要么就是干的活杂 3、给出校招薪资范围过于巨大,说明里面的薪资制度(包括涨薪)可能有大坑
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务