Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Wenden Sie die COUNT-Funktion auf eine Untergruppe von Gruppen an

Nein, keine Analysefunktionen erforderlich; Sie sind sowieso nur schwer in derselben Abfrage wie eine Aggregatfunktion zu haben.

Sie suchen nach dem case Anweisung erneut, Sie müssen sie nur in GROUP BY einfügen.

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

Beachten Sie, dass ich Ihren count(case when...) geändert habe zu sum() . Dies liegt daran, dass Sie einen booleschen Wert 1/0 verwenden, sodass dies auf die gleiche Weise funktioniert, aber viel sauberer ist.

Aus dem gleichen Grund habe ich Ihren between ignoriert bei Ihrer Gehaltsberechnung; es besteht keine besondere Notwendigkeit dafür, denn wenn das Gehalt größer als 2000 ist, ist der erste CASE bereits erfüllt.