Nej, intet behov for analytiske funktioner; de er alligevel svære at have i den samme forespørgsel som en samlet funktion.
Du leder efter case
sætning igen, du skal bare sætte den 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
Bemærk, at jeg har ændret dit count(case when...)
til sum()
. Dette skyldes, at du bruger en boolsk 1/0, så det vil fungere på samme måde, men det er meget renere.
Af samme grund har jeg ignoreret dit between
i din lønberegning; der er ikke noget særligt behov for det, som om lønnen er større end 2000, er den første CASE allerede blevet opfyldt.