Nein, keine Analysefunktionen erforderlich; Sie sind sowieso nur schwer in derselben Abfrage wie eine Aggregatfunktion zu haben.
Sie suchen nach dem case
Anweisung erneut, Sie müssen sie nur in GROUP BY einfügen.
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
Beachten Sie, dass ich Ihren count(case when...)
geändert habe zu sum()
. Dies liegt daran, dass Sie einen booleschen Wert 1/0 verwenden, sodass dies auf die gleiche Weise funktioniert, aber viel sauberer ist.
Aus dem gleichen Grund habe ich Ihren between
ignoriert bei Ihrer Gehaltsberechnung; es besteht keine besondere Notwendigkeit dafür, denn wenn das Gehalt größer als 2000 ist, ist der erste CASE bereits erfüllt.