select b.id, b.name, b.grade_sum from (select user.id, a., rank() over (order by a.grade_sum desc) as r from (select user.name, sum(if(g.type='add',grade_num, -1grade_num)) as grade_sum from grade_info g left join user on g.user_id=user.id group by user.name) a left join user on a.name=user.name) b ...