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.