select id, name, sum_g from( select *, rank()over(order by sum_g desc) as r from( select distinct id, name, sum(grade_num)over(partition by name) as sum_g from grade_info left join user on grade_info.user_id=user.id) as tb1 ) as tb2 where r=1 order by id