本题思路,首先根据积分表求出各个用户的积分总和,并将用户id、各用户积分和新建为表t1,再在表t1的基础上,对各用户的积分按降序排列,并将排序字段同用户id、各用户积分和字段组成新表t2;

最后,使用user表同t2表进行表连接,筛选出排名为第一的用户信息,并按用户id升序排列。

select u.id,u.name,t2.s from user u  
right join # 将user表同t2表进行连接
(select ui,s,rank()over(order by s desc) rk from 
(select distinct user_id ui,sum(grade_num)over(partition by user_id) s from grade_info) t1) t2   # 首先,从表grade_info中筛选出用户id、以及各用户的总积分作为表t1;其次,在表t1的基础上对用户的总积分按降序排列,将得到的用户id、各用户的总积分以及排序字段作为表t2
on u.id = t2.ui
where t2.rk = 1 # 筛选积分总和为第一的用户
order by u.id # 按用户id升序排列