Oracle
 sql >> Base de données >  >> RDS >> Oracle

Appliquer la fonction COUNT sur un sous-groupe de groupes

Non, pas besoin de fonctions analytiques ; ils sont de toute façon difficiles à avoir dans la même requête qu'une fonction d'agrégation.

Vous recherchez le case encore une fois, il vous suffit de le mettre dans le 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

Notez que j'ai changé votre count(case when...) à sum() . C'est parce que vous utilisez un booléen 1/0 donc cela fonctionnera de la même manière mais c'est beaucoup plus propre.

Pour la même raison, j'ai ignoré votre between dans votre calcul de salaire; il n'y a pas de besoin particulier car si le salaire est supérieur à 2000 le premier CASE a déjà été rempli.