题解 | #获得积分最多的人(二)#
获得积分最多的人(二)
http://www.nowcoder.com/practice/b6248d075d2d4213948b2e768080dc92
本题我的思路是采用两次子查询。
select u.id,u.name,b.ag from ---
(select a.ui an,a.sum_g ag,dense_rank()over(order by a.sum_g desc) dr from
(select DISTINCT user_id ui,sum(grade_num)over(partition by user_id) sum_g
from grade_info) a) b --- 表a为第一层子查询,用于获取各用户的累计新增积分;
表b为第二层子查询,用于对表a获取的累计新增积分进行排序。
join user u on b.an = u.id --- 将获取的表b与user表按用户id进行连接
where b.dr=1 --- 获取累计积分为第一名的用户
order by u.id --- 是最终结果按用户id升序排列