Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Aplicar a função COUNT em um subgrupo de grupos


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.