SQL-Abfrage: Welcher Berufsgruppe gehören am meisten Mitarbeiter an? Wie viele sind es?

2 Antworten

Denke das läuft auf analytische Funktionen und ein SELECT außen rum hinaus. Also etwas wie:

SELECT TAB.Job,
       TAB.Anzahl_Mitarbeiter
FROM (
  SELECT EMP.Job,
           COUNT(*) AS Anzahl_Mitarbeiter,
           MAX(COUNT(*)) OVER() AS Max_Anzahl_Mitarbeiter
  FROM   EMP
  GROUP  BY EMP.Job) TAB
WHERE  TAB.Anzahl_Mitarbeiter = TAB.Max_Anzahl_Mitarbeiter

Geht natürlich noch mit etlichen anderen Konstrukten. Verschachtelte SELECTs, mit einer WITH Clause etc. pp.

Je nach SQL Engine halt RANK() OVER() statt MAX(*) OVER() und dann den jeweiligen Rang vergleichen und nicht die Anzahl, sprich Rang #1, bei Sortierung absteigend, also:

SELECT TAB.Job,
       TAB.Anzahl_Mitarbeiter
FROM (
  SELECT EMP.Job,
         COUNT(*) AS Anzahl_Mitarbeiter,
         RANK() OVER(ORDER BY COUNT(*) DESC) AS Rang
  FROM   EMP
  GROUP  BY EMP.Job) TAB
WHERE  TAB.Rang = 1
Woher ich das weiß:Berufserfahrung – Softwareentwickler/Projektleiter seit 2012

Die Aggregatfunktion count ist bestimmt richtig.