题解 | #获得积分最多的人(三)#
获得积分最多的人(三)
http://www.nowcoder.com/practice/d2b7e2a305a7499fb310dc82a43820e8
第一步 做累计分
第二步 连接用户表和查询出来的累计分表
第三步 用where筛选积分最大值
select u.id,u.name, gs.grade_sum
from user as u
join (
#这个就是累计分表
select user_id,sum(
#用case如果是add就是+grade_num,如果是负的就是-grade_num
case when type='add' then grade_num*1
else grade_num*(-1)
end
) as grade_sum
from grade_info
group by user_id
) as gs
on u.id= gs.user_id
#用where筛选积分等于最大值的情况
where gs.grade_sum=(
select max(gs1.grade_sum)
from (
select user_id,sum(
case when type='add' then grade_num*1
else grade_num*(-1)
end
) as grade_sum
from grade_info
group by user_id
) as gs1
)
order by id;