题解 | #多个最值求解思路#
获得积分最多的人(二)
https://www.nowcoder.com/practice/b6248d075d2d4213948b2e768080dc92
SELECT #第二种方法 a.user_id id, b.name, z grade_num FROM ( SELECT user_id, sum(grade_num) z, rank() over(order by sum(grade_num) desc) pai FROM grade_info GROUP BY user_id ORDER BY z desc ) a LEFT JOIN user b ON a.user_id=b.id WHERE pai=1 with tmp_table as ( #第一种方法 select t1.id, t1.name, sum(t2.grade_num) as grade_sum from user as t1 join grade_info as t2 on t1.id = t2.user_id group by t1.id ) select id, name, grade_sum from tmp_table where grade_sum = (select max(grade_sum) from tmp_table) order by id;
在这里统计一下求多个相同最值的思路
首先不能使用group by + limit 1 筛选,因为你不知道有几个最值
1.使用子查询查出最值,然后使用WHERE筛选
2.使用rank () over ()开窗函数计算排名,WHERE筛选排名