题解 | #获得积分最多的人(二)#

获得积分最多的人(二)

https://www.nowcoder.com/practice/b6248d075d2d4213948b2e768080dc92

#请你写一个SQL查找积分增加最高的用户的id(可能有多个),名字,以及他的总积分是多少,查询结果按照id升序排序

#窗口累加/group by,group by会导致name列不能加入子查询



/* with m1 as
(
select
sum(grade_num) as sum1
,g.user_id as user_id1
from grade_info g left join user u 
on g.user_id = u.id
where type='add'
group by g.user_id
)
#group by会导致name列不能加入子查询从而影响输出
select 
user_id1
from m1
where sum1 in(select max(sum1) from m1 )
*/


with m1 as
(
select
sum(grade_num)over(partition by u.name order by g.user_id asc) as sum1
#此时必须得name 来搭桥,单单g.user_id 不够达成窗口累加
,u.name as name1
,u.id as user_id1
from grade_info g left join user u 
on g.user_id = u.id
where type='add'
)

select 
distinct m1.user_id1 as id
, m1.name1 as name
, m1.sum1 as grade_num
from m1
where m1.sum1 in(select max(sum1) from m1)
order by id

全部评论

相关推荐

notbeentak...:孩子,说实话,选择很重要,可能你换一个方向会好很多,但是现在时间不太够了,除非准备春招
点赞 评论 收藏
分享
09-01 21:40
已编辑
同济大学 Java
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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