题解 | #获得积分最多的人(三)#
获得积分最多的人(三)
https://www.nowcoder.com/practice/d2b7e2a305a7499fb310dc82a43820e8
思路:这道题先用case when函数把减分的情况全部*-1,变成负数。
再针对结果,用窗口函数的sum功能,累加,算出所有用户的最终累计分。针对最终累计分,max函数找出所有人里的最高分
with t2 as(
select user_id, sum(newscore) over (partition by user_id) as grade_num
from(
select user_id ,
case when type='reduce' then grade_num*(-1) else grade_num end as newscore
from grade_info)t1 )
select distinct user_id, name,grade_num from t2
join user on t2.user_id=user.id
where grade_num=(select max(grade_num) from t2)
order by user_id