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

获得积分最多的人(三)

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

  • 参考答案
select 
u.id,
u.name,
t.grade_sum grade_sum
from user u,(
    select user_id,
    sum(if(type='add',grade_num,-grade_num)) grade_sum,
    dense_rank() over(order by sum(if(type='add',grade_num,-grade_num)) desc) rk
    from grade_info gi
    group by user_id
    ) t
where u.id=t.user_id and rk=1
order by u.id
  • 本题解析
    题中让我们查的数据中,id和name直接从user表中查出来就可以了;
    关键是查grade_sum,分数有加有减,所以我们用if判断一下:
sum(if(type='add',grade_num,-grade_num))

积分统计出来了之后,进行排序,利用dense_rank()正好可以帮我们得到rank=1的数据

dense_rank() over(order by sum(if(type='add',grade_num,-grade_num)) desc)
全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务