题解 | #获得积分最多的人(三)#
获得积分最多的人(三)
http://www.nowcoder.com/practice/d2b7e2a305a7499fb310dc82a43820e8
此题几乎上一题几乎一模一样,只是在type类型中加了个reduce, 使用if语句进行判断,该加的加,该减的减去. 步骤: 1.先利用sum函数对么个用户进行求和, 2.利用窗口函数rank()进行排名, 3.加上限定条件只取排名第一的用户进行输出. 注意最后的排序是按照用户的id升序排序的,排序函数默认都是选择升序的 思路简单清晰.
select u.id,u.name,b.grade as grade_sum
from
(select user_id,a.grade,
rank() over(order by a.grade desc) as t_rank
from
(SELECT user_id,sum(if(type='add',grade_num,-1*grade_num))as grade
from grade_info
group by user_id)a
)b
join user u
on b.user_id=u.id
where b.t_rank=1
order by u.id;

美团成长空间 2667人发布
