Nie, nie ma potrzeby wykonywania funkcji analitycznych; i tak trudno je mieć w tym samym zapytaniu, co funkcja agregująca.
Szukasz case
oświadczenie ponownie, wystarczy umieścić je w GRUPIE WG.
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
Zwróć uwagę, że zmieniłem Twoje count(case when...)
do sum()
. Dzieje się tak dlatego, że używasz wartości logicznej 1/0, więc to będzie działać w ten sam sposób, ale jest znacznie czystsze.
Z tego samego powodu zignorowałem twoje between
w kalkulacji wynagrodzenia; nie ma szczególnej potrzeby, ponieważ jeśli pensja jest wyższa niż 2000, pierwszy PRZYPADEK został już zrealizowany.