Não, não há necessidade de funções analíticas; eles são difíceis de ter na mesma consulta como uma função agregada de qualquer maneira.
Você está procurando o
case
declaração novamente, você só tem que colocá-lo no 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
Observe que alterei seu
count(case when...)
para sum()
. Isso ocorre porque você está usando um booleano 1/0, então isso funcionará da mesma maneira, mas é muito mais limpo. Pelo mesmo motivo, ignorei seu
between
no cálculo do seu salário; não há necessidade especial, pois se o salário for superior a 2000 o primeiro CASE já foi cumprido.