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

获得积分最多的人(一)

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
全部评论
那个sum之是不是少写了over部分
点赞 回复 分享
发布于 2021-06-28 20:57
为什么where=1 只能放在表外,不能放在表内呢
点赞 回复 分享
发布于 2021-08-21 22:38

相关推荐

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