No, no hay necesidad de funciones analíticas; son difíciles de tener en la misma consulta como una función agregada de todos modos.
Está buscando el case
de nuevo, solo tienes que ponerlo en el 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
Tenga en cuenta que he cambiado su count(case when...)
a sum()
. Esto se debe a que está utilizando un booleano 1/0, por lo que funcionará de la misma manera, pero es mucho más limpio.
Por la misma razón, he ignorado tu between
en el cálculo de su salario; no hay necesidad especial de ello ya que si el salario es mayor a 2000 ya se cumplió el primer CASO.