SELECT id,NAME,grade FROM (SELECT id ,NAME ,grade ,RANK() OVER(ORDER BY grade DESC) AS rk FROM user AS a LEFT JOIN (SELECT DISTINCT user_id ,SUM(IF(TYPE = 'add',1,-1)*grade_num) OVER (PARTITION BY user_id)AS grade FROM grade_info ) AS b ON a.id = b.user_id ) AS t WHERE rk=1