窗口函数计数,对于总数为奇数和偶数时要分类讨论,用union函数去掉重复项,如果有空的就不取
select
case
when sum(number)%2=1 then (select grade
from(
select grade,sum(number) over(order by grade asc) as rk
from class_grade
)a
where rk>=ceil(sum(number)/2)
limit 1
)
when sum(number)%2=0 then(select grade
from(
select grade,sum(number) over(order by grade asc) as rk
from class_grade
)b
where rk>=ceil(sum(number)/2)
limit 1
)
end as grade
from class_grade
union
select *
from(
select
case
when sum(number)%2=0 then(select grade
from(
select grade,sum(number) over(order by grade asc) as rk
from class_grade
)b
where rk>=ceil((sum(number)/2)+1)
limit 1
)
end as grade
from class_grade
)a
where grade is not null

京公网安备 11010502036488号