Nee, analytische functies zijn niet nodig; ze zijn sowieso moeilijk in dezelfde query te hebben als een aggregatiefunctie.
U zoekt de case
statement opnieuw, je hoeft het alleen maar in de GROUP BY te zetten.
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
Merk op dat ik je count(case when...)
. heb gewijzigd naar sum()
. Dit komt omdat je een boolean 1/0 gebruikt, dus dit werkt op dezelfde manier, maar het is een stuk overzichtelijker.
Om dezelfde reden heb ik je between
. genegeerd in uw salarisberekening; er is geen specifieke behoefte aan, alsof het salaris hoger is dan 2000, de eerste CASE al is vervuld.