No, non c'è bisogno di funzioni analitiche; sono comunque difficili da avere nella stessa query di una funzione aggregata.
Stai cercando il case
di nuovo, devi solo inserirlo nel 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
Nota che ho cambiato il tuo count(case when...)
a sum()
. Questo perché stai usando un booleano 1/0, quindi funzionerà allo stesso modo ma è molto più pulito.
Per lo stesso motivo ho ignorato il tuo between
nel calcolo dello stipendio; non ce n'è bisogno in particolare come se lo stipendio fosse maggiore di 2000 il primo CASE è già stato adempiuto.