题解 | 获得积分最多的人(三)
获得积分最多的人(三)
https://www.nowcoder.com/practice/d2b7e2a305a7499fb310dc82a43820e8
select distinct id,name, grade_num from( select id,name, dense_rank() over (order by grade_num desc) as rk,grade_num from( SELECT u.id, u.name, SUM(CASE WHEN g.type = 'add' THEN g.grade_num ELSE -g.grade_num END) AS grade_num FROM user u JOIN grade_info g ON u.id = g.user_id GROUP BY u.id, u.name )a)b where rk=1
知道上一题为啥有重复了,因为用了sum的窗口函数,所以每条都回给出一个结果,应该去使用sum