题解 33 | #找出每个学校GPA最低的同学#

【场景】:每个--最低(高)-- 【分类】:窗口函数、分组函数、表连接

分析思路

难点: 1.如何取出使用分组函数之后得不到的device_id?连接其他表或者使用排序函数

(1)统计每个学校的最低gpa

  • [使用]:min

(2)取出每个学校gpa最低的同学的device_id

  • [使用]:join

最终结果

select 查询结果 [用户号;学校;gpa]
from 从哪张表中查询数据[多表]
order by 对查询结果排序 [学校];

求解代码

方法一:

with子句 + 一步步拆解

with
    temp as(
        #对每个学校的gpa排序
        select distinct
            device_id,
            university,
            row_number() over(partition by university order by gpa) as ranking,
            min(gpa) over(partition by university order by gpa) as gpa
        from user_profile
        order by university
    )
#取出每个学校gpa最低的同学的device_id
select 
    device_id,
    university,
    gpa
from temp
where ranking = 1

方法二:

表连接

select
    u.device_id,
    u.university,
    u.gpa
from user_profile u
join(
    #统计每个学校的最低gpa
    select
        university,
        min(gpa) as gpa
    from user_profile
    group by university
    ) as attr on u.university = attr.university and u.gpa = attr.gpa
order by university

方法三:

子查询

select
    device_id,
    university,
    gpa
from user_profile
where (university,gpa) in(
    #统计每个学校的最低gpa
    select
        university,
        min(gpa) as gpa
    from user_profile
    group by university
)
order by university
全部评论

相关推荐

故事和酒66:假设一下,就算报了培训班,不还是要投简历,只是项目改了。那不如先写几个培训班的项目,纯靠编,然后试试有没有面试。如果真有再报也不迟,如果没有还是没有,那就不是培训班的问题了。
点赞 评论 收藏
分享
09-01 21:40
已编辑
同济大学 Java
点赞 评论 收藏
分享
评论
26
25
分享

创作者周榜

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