Nej, inget behov av analytiska funktioner; de är ändå svåra att ha i samma fråga som en aggregerad funktion.
Du letar efter case
uttalandet igen, du behöver bara lägga det i 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
Observera att jag har ändrat ditt count(case when...)
till sum()
. Detta beror på att du använder en boolesk 1/0 så detta kommer att fungera på samma sätt men det är mycket renare.
Av samma anledning har jag ignorerat ditt between
i din löneberäkning; det finns inget särskilt behov av det som om lönen är högre än 2000, det första fallet har redan uppfyllts.