sql >> Base de Datos >  >> RDS >> Oracle

Aplicar la función COUNT en un subgrupo de grupos

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.