SQL: Modus (Modalwert) einer Spalte finden

Aus DBWiki
Wechseln zu: Navigation, Suche

Zurück zur Übersicht



Um den Modus einer Spalte zu bestimmen, können je nach SQL-Dialekt entweder Window-Funktionen oder eine Unterabfrage, die einen skalaren Wert zurückgibt, in der HAVING-Klausel angewendet werden. In PostgreSQL ist ab Version 9.4 mode() als Aggregat-Funktion integriert.


Im weiteren soll der Modalwert der Spalte gehalt von der Abteilung 20 ermittel werden.

Lösung mittels Unterabfrage

Hinweis für Access-Anwender
Um die folgende Abfrage selbst testen zu können, müssen die Tabellen der Übungsdatenbank vorhanden sein.

SELECT gehalt
FROM   mitarbeiter AS m
WHERE  abt_nr = 20
GROUP  BY abt_nr, gehalt
HAVING count(*) = ( SELECT DISTINCT TOP 1 count(*)
                    FROM   mitarbeiter
                    WHERE  abt_nr = m.abt_nr
                    GROUP  BY gehalt
                    ORDER  BY 1 DESC)

Als Ergebnis sollten wir 3000 erhalten.

Lösung mittels Window-Funktion

SELECT gehalt AS modal_gehalt
FROM   ( SELECT gehalt,
                dense_rank() OVER ( ORDER BY cnt DESC ) AS dr
         FROM   ( SELECT gehalt,
                         COUNT(*) AS cnt
                  FROM   mitarbeiter
                  WHERE  abt_nr = 20
                  GROUP  BY gehalt ) AS m0 ) AS m1
WHERE dr = 1

Für PostgreSQL zeigt dieser DBFiddle zusätzlich noch zwei weitere Lösungsmöglichkeiten an.



Zurück zur Übersicht