WITH final_ranks AS ( SELECT grade, total_num, end_rank, COALESCE(LAG(end_rank) OVER(ORDER BY grade ASC), 0) + 1 AS start_rank FROM ( SELECT grade, SUM(number) OVER(ORDER BY grade ASC) AS end_rank, SUM(number) OVER() AS total_num FROM class_grade ) t ) SELECT grade FROM final_ranks WHERE CASE WHEN total_num % 2 = 1 THEN (total_num + 1) / 2 BETWEEN start_rank AND end_rank ELSE (total_num / 2 BETWEEN start_rank AND end_rank) OR (total_num / 2 + 1 BETWEEN start_rank AND end_rank) END;