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

获得积分最多的人(三)

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

下面代码是获得积分最多的人(一)(二)(三)的通解,第一题只是将第一行后的a.id去掉就可以了!~
思路如下:
- 1.求每个用户的总积分
- 2.题意中相同积分需要输出,按总积分采用dense_rank() over()排序,取排名为1即可

SELECT a.id,
       a.name,
       b.grade_sum
FROM user a
JOIN
  (SELECT user_id,
          grade_sum,
          dense_rank() over(
                            ORDER BY grade_sum DESC) AS r
   FROM
     (SELECT user_id,
             sum(if(TYPE='add',1,-1)*grade_num) AS grade_sum
      FROM grade_info
      GROUP BY user_id) t1) b ON a.id = b.user_id
WHERE r=1
ORDER BY id
全部评论

相关推荐

不愿透露姓名的神秘牛友
03-28 13:48
hory权:校招vip纯神人了,还说自己是什么师范大学的
点赞 评论 收藏
分享
评论
2
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务