题解 | #获得积分最多的人(一)#
获得积分最多的人(一)
http://www.nowcoder.com/practice/1bfe3870034e4efeb4b4aa6711316c3b
下面代码是获得积分最多的人(一)(二)(三)的通解,第一题只是将第一行后的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