Не, няма нужда от аналитични функции; така или иначе е трудно да ги има в една и съща заявка като агрегатна функция.
Търсите case
отново, просто трябва да го поставите в GROUP BY.
select hire_year
, sum(married) as married
, sum(certified) as certified
, sum(religious) as religious
, case when salary > 2000 then 'A'
when salary >= 1000 then 'B'
else 'C' end as salary_class
from employees
group by hire_year
, case when salary > 2000 then 'A'
when salary >= 1000 then 'B'
else 'C' end
Обърнете внимание, че промених вашия count(case when...)
към sum()
. Това е така, защото използвате булево 1/0, така че това ще работи по същия начин, но е много по-чисто.
По същата причина пренебрегнах вашето between
при изчисляване на вашата заплата; няма особена нужда от това, тъй като ако заплатата е по-голяма от 2000, първият СЛУЧАЙ вече е изпълнен.