获得积分最多的人(二)

获得积分最多的人(二)

http://www.nowcoder.com/questionTerminal/b6248d075d2d4213948b2e768080dc92

我们能知道最多的人只有1个的时候怎么写,当有多个的时候,那么我们先获取这个最大值,比如4,4,3,3,3,先获得4是最大值,那么再获得所有的,其中等于4的,就按id升序输出。
获取最大值SQL:
select sum(grade_num) as grade_sum from grade_info group by user_id order by grade_sum desc limit 1

获得所有人的积分的SQL:
select user_id,sum(grade_num) as grade_sum from grade_info group by user_id

联立得:
select user_id,sum(grade_num) as grade_sum from grade_info group by user_id
having grade_sum=(select sum(grade_num) as grade_sum from grade_info group by user_id order by grade_sum desc limit 1);


再联立user表得到结果:
select user.id, user.name,t.grade_sum from(
select user_id,sum(grade_num) as grade_sum from grade_info group by user_id
having grade_sum=(select sum(grade_num) as grade_sum from grade_info group by user_id order by grade_sum desc limit 1) 
) t
join user
on t.user_id=user.id
order by user.id 




全部评论
题做到一半遇到个奇怪的问题: 请问大佬我这段代码执行多次,为什么有时候能出结果,有时候却报错?(用的mysql) select id,name,sum(grade_num) over(partition by name) grade_sum from user u join grade_info g on u.id=g.user_id group by name
点赞 回复 分享
发布于 2022-01-27 15:45
with a as (select id, name, sum(grade_num)over(partition by user_id) as grade_sum from user u join grade_info g on u.id=g.user_id order by grade_sum desc ) select id, name, grade_sum from( select *, dense_rank()over(order by grade_sum desc) rk from a) t1 where rk=1 group by id order by id 大佬为啥这样会报错答案一样
点赞 回复 分享
发布于 2022-08-26 11:59 上海
大佬的思路妙,首先获取最高分的用户id和最高分。select user_id,sum(group_num) as group_sum from grade_info group by user_id order by group_sum desc limit 1。其次获取所用用户的分数总和,然后利用having判断分数总和等于最高分的筛选出来,再联立用户表,得到id和name即可解决问题。
点赞 回复 分享
发布于 2024-10-25 11:03 广东

相关推荐

评论
25
5
分享

创作者周榜

更多
牛客网
牛客企业服务