题解 | #多个最值求解思路#

获得积分最多的人(二)

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筛选排名

全部评论

相关推荐

07-29 14:09
门头沟学院 Java
我爱o泡我爱o泡o泡果奶ooo
26加瓦鼠鼠:三个offer了,停手吧,回头是岸
点赞 评论 收藏
分享
评论
点赞
1
分享

创作者周榜

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