第一步通过group by 和sum对不用用户的累计积分分组求和,即 ( select user_id, sum(grade_num) as t_num from grade_info group by user_id ) as a 第二步,通过rank()over()函数对第一步的累计积分进行排序,即 select user_id,t_num, rank() over (order by t_num desc) as r from (第一步 ) as b 注:因题目提示有多个积分第一的情况所以,用rank 第三步,将第二步生成的b表和user用join连接,并select 出需要显示的列,即id, name, b.t_num as grade_num,最后排序,即 select id, name, b.t_num as grade_num from ( select user_id, t_num, rank() over ( order by t_num desc ) as r from ( select user_id, sum(grade_num) as t_num from grade_info group by user_id ) as a ) as b join user as u on u.id = b.user_id where b.r = 1 order by id