时间复杂度最小的写法(空间占用多),首先我们这里借用2层子查询,第一层查出所有人的累计积分sum(if),第二层我们借助窗口函数直接给他排序标上排名值
最后我们直接选取排名为1的数据就出结果啦,简单清晰,(小贴士 rank dense_rank row_number大家自己了解下排序的值哈)
图片说明
select t1.id,t1.name,t0.grade as grade_sum
from(
    select user_id,grade,rank()over(order by grade desc) as t
    from(
        select user_id,sum(if(type='add',grade_num,-1*grade_num)) as grade
        from grade_info
        group by user_id
        ) a0
) t0
join user as t1
on t0.user_id = t1.id
where t=1