with t1 as( select user_id, sum(case when type = 'add' then grade_num else -1*grade_num end) as sum_grade from grade_info group by user_id ), t2 as( select user_id, sum_grade, rank()over(order by sum_grade desc) as rank1 from t1 ) select a.id, a.name, t2.sum_grade as grade_num from user as a join t2 on a.id = t2.user_id and t2.rank1 = 1
用窗口函数筛选