WITH ranked AS( SELECT grade, number, SUM(number) OVER () AS total, SUM(number) OVER (ORDER BY grade) AS roll FROM class_grade ORDER BY grade ) SELECT grade FROM ranked WHERE (total % 2 = 0 AND (((total / 2) BETWEEN (roll - number + 1) AND roll) #偶数 OR ((total / 2 + 1) BETWEEN (roll - number + 1) AND roll))) OR (total % 2 = 1 AND ((total + 1) / 2) BETWEEN (roll - number + 1) AND roll) #奇数 ORDER BY grade