Ne, nejsou potřeba analytické funkce; stejně je těžké je mít ve stejném dotazu jako agregační funkce.
Hledáte case
znovu, stačí jej vložit do 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
Všimněte si, že jsem změnil váš count(case when...)
na sum()
. Je to proto, že používáte booleovskou 1/0, takže to bude fungovat stejným způsobem, ale je to mnohem čistší.
Ze stejného důvodu jsem ignoroval vaše between
ve výpočtu vaší mzdy; není to nijak zvlášť potřeba, protože pokud je plat vyšší než 2000, první PŘÍPAD již byl splněn.