解法一
1、查询积分增加最高的积分数
select max(grade_sum) as grade_sum
from
(select user_id,sum(grade_num) as grade_sum
from grade_info
group by user_id) as a
2、将user表与grade_info表连接,按name分组,统计每个用户的积分数,并筛选积分数等于1表的结果的信息
select a.name,sum(grade_num) as grade_sum
from user as a
join grade_info as b
on a.id=b.user_id
group by a.name
having grade_sum=
(select max(grade_sum) as grade_sum
from
(select user_id,sum(grade_num) as grade_sum
from grade_info
group by user_id) as a)
解法二 窗口函数
1、查询积分最高的用户id和总积分(用窗口函数sum() 对user_id 分组求和 ,然后按照求和结果倒序排序,取排在第一位的值)。
select user_id,sum(grade_num) over (partition by user_id) as grade_sum
from grade_info 
order by grade_sum desc
limit 1
2、1表与user表连接,查询姓名和总积分
select b.name,a.grade_sum
from
(select user_id,sum(grade_num) over (partition by user_id) as grade_sum
from grade_info 
order by grade_sum desc
limit 1) as a
join user as b
on a.user_id=b.id