题解 | #找出每个学校GPA最低的同学#
找出每个学校GPA最低的同学
https://www.nowcoder.com/practice/90778f5ab7d64d35a40dc1095ff79065
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
/*SELECT device_id,
university,
gpa
FROM (
SELECT *,
ROW_NUMBER() OVER(PARTITION BY university ORDER BY gpa) AS rk
FROM user_profile
) a
WHERE a.rk=1
*/
有两种解法:连接表和窗口函数。
不能直接按照学校分组,然后min(gpa),因为这样得不到相应的device_id。
方法二先用窗口函数,按照学校分组并对组内进行排序,可以得到多了一列排名的表。然后再从这个表中检索相应的字段。


查看11道真题和解析