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

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

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

SELECT device_id,university,min(gpa) FROM user_profile GROUP BY university; 因为学校与学生是一对多的关系,如果仅用min求出gpa最低的学生,查询结果中的id与学生不一定是对应的关系,因此此方法错误。 (1)方法一:将表a的device_id,university,gpa和表b的university,min(gpa)连接起来找。

SELECT a.device_id,a.university,a.gpa FROM user_profile a
JOIN (SELECT university,min(gpa) gpa FROM user_profile GROUP BY university) b
on a.university=b.university and a.gpa=b.gpa
ORDER BY university;

(2)方法二:窗口函数

SELECT device_id,university,gpa FROM
(SELECT device_id,university,gpa, 
RANK() over (PARTITION BY university ORDER BY gpa) rk FROM user_profile) a
WHERE a.rk=1;

窗口函数的学习 https://zhuanlan.zhihu.com/p/92654574

小提示:要找最大最小值对应的那条数据的其他字段信息,通常可以联系一下窗口函数取where rk=1。(直接max()或者min()查询到的其他字段是不对应的)

全部评论
select device_id,university,gpa from user_profile where gpa in (select min(gpa) over(partition by university) as gpa from user_profile) group by university order by university 大佬你好,求教我这种方法错在哪里呀
1 回复 分享
发布于 2022-02-03 13:05
请问大佬为什么仅用min求出gpa最低的学生,查询结果中的id与学生不一定是对应的关系,这个也按university分组了,为什么id和学生不一定是对应的
点赞 回复 分享
发布于 2022-07-11 09:25
“因为学校与学生是一对多的关系,如果仅用min求出gpa最低的学生,查询结果中的id与学生不一定是对应的关系,因此此方法错误。”为什么学校和学生是一对多的关系,查询结果id和学生就不定对应。还是没懂这个逻辑
4 回复 分享
发布于 2022-08-26 17:29 北京
你好,想问下,方法一里面,表连接的时候为什么又要用university又要用gpa,为什么不能只用gpa
1 回复 分享
发布于 2021-10-29 15:04
大神,我就想请教一下最后where a.rk=1,上面的Oder by是不是要按照升序排列,这样最小值才在第一个啊?
1 回复 分享
发布于 2021-12-11 16:31
但是mysql命令执行顺序是先执行分组后执行查询内容
1 回复 分享
发布于 2022-01-09 12:22
题目中也没说呀,为什么最后要按学校排序
点赞 回复 分享
发布于 2021-11-05 11:46
时间更短 select device_id,university,gpa from (select device_id,university,gpa, ROW_NUMBER() over(partition by university order by gpa) rn from user_profile) a where a.rn=1;
点赞 回复 分享
发布于 2022-01-27 10:10
第一个不对吧,可能存在university和gpa都相同的情况
点赞 回复 分享
发布于 2022-04-16 13:39
为什么用了rank()函数之后,不会出现两个gpa相同的学生,照道理按照窗口函数中rank给出的排名会有一样的才对
点赞 回复 分享
发布于 2022-10-31 15:18 江苏
Mysql现在支持窗口函数吗
点赞 回复 分享
发布于 2023-05-12 15:36 北京
where a.rk=1 为什么是取值的意思?不应该条件去除的意思吗?
点赞 回复 分享
发布于 2023-08-26 16:50 上海
为什么用的是join而不是left join?(用join最后得出的结果是,北京大学和清华大学都对应了两行数据,那还是最小gpa吗?)
点赞 回复 分享
发布于 2023-12-13 14:58 福建

相关推荐

点赞 评论 收藏
分享
评论
155
34
分享

创作者周榜

更多
牛客网
牛客企业服务