时间复杂度最小的写法(空间占用多),首先我们这里借用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