下面代码是获得积分最多的人(一)(二)(三)的通解,第一题只是将第一行后的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 


京公网安备 11010502036488号