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

找出每个学校GPA最低的同学

https://www.nowcoder.com/practice/90778f5ab7d64d35a40dc1095ff79065

select
  device_id,
  university,
  gpa
from (
    select *,
    rank() over (partition by university order by gpa) as rk
    from user_profile
    ) up
where up.rk=1

限定条件:gpa最低,看似min(gpa),但是要留意,是每个学校里的最低,不是全局最低。min(gpa)的时候对应同学的ID丢了,直接干是拿不到最低gpa对应的同学ID的;

利用窗口函数,先按学校分组计算排序gpa,得到最低gpa的记录在用子查询语法拿到需要的列即可。此题中rank()可以得到排序后的位序,取位序为1即可得到最小值(升序时)。

1.窗口函数语法

<窗口函数> over (partition by <用于分组的列名>

                order by <用于排序的列名>)

<窗口函数>的位置,可以放以下两种函数:

1)专用窗口函数,比如rank, dense_rank, row_number

2)聚合函数,如sum. avg, count, max, min

2.窗口函数有以下功能:

1)同时具有分组(partition by)和排序(order by)的功能

2)不减少原表的行数,所以经常用来在每组内排名

3.注意事项

窗口函数原则上只能写在select子句中

4.窗口函数使用场景

1)业务需求“在每组内排名”,比如:

排名问题:每个部门按业绩来排名

topN问题:找出每个部门排名前N的员工进行奖励

#我的求职思考#
全部评论

相关推荐

评论
2
6
分享

创作者周榜

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