我是觉得逻辑很清晰的,直接case when每种情况

select job, 
case when count(*) <= 2 then 1 
     when count(*) > 2 and count(*) % 2 = 1 then ceiling(count(*)/2)
     else floor(count(*)/2)
end as start,
case when count(*) <= 2 then count(*)
     when count(*) > 2 and count(*) % 2 = 1 then ceiling(count(*)/2)
     else cast((count(*)/2 + 1) as unsigned)
end as 'end' 
from grade
group by job
order by job