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

获得积分最多的人(三)

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

select 
  u.id, 
  u.name, 
  a.grade_num 
from (
  select 
    t2.user_id, 
    t2.grade_num,
    rank() over (order by t2.grade_num desc) as t1 
  from (
    select 
      user_id, 
      sum(case when type="add" then grade_num else -1*grade_num end) as grade_num  
    from grade_info 
    group by user_id
  ) t2
) a
join `user` u on u.id = a.user_id 
where a.t1 = 1 
order by u.id;

子查询最内层

select

user_id,

sum(case when type="add" then grade_num else -1*grade_num end) as grade_num //如果是add 就返回grade_num 不是就返回*1grade_num

from grade_info

group by user_id

子查询中层

select

t2.user_id,

t2.grade_num,

rank() over (order by t2.grade_num desc) as t1 ) 按照积分降序排序 不连续 相同的积分序号相同

最外层

两个表进行连接

再筛选排名都是1的积分

全部评论

相关推荐

10-19 11:19
已编辑
哈尔滨理工大学 golang
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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