SQL: Erstellen einer festen Anzahl von Datensammlungen

Aus DBWiki
Wechseln zu: Navigation, Suche

Zurück zur Übersicht



Anders als in Erstellen von gleich großen Datensammlungen ist hier die Anzahl der Gruppen fest vorgegeben. Mittels Self-Join, Zählen der Datensätze und Modulus-Operation darauf, lässt sich die Zuordnung vornehmen. In SQL-Dialekten mit Window Funktionen kann die ntile()-Funktion verwendet werden.


Es sollen z.B. alle Mitarbeiter gleichmäßig auf 4 Gruppen verteilt werden.

Lösung für Jet-SQL

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

SELECT ( Count( * ) + 3 ) Mod 4 + 1 AS gruppe,
       m0.ma_nr,
       min( m0.ma_name ) AS ma_name
FROM   mitarbeiter AS m0,
       mitarbeiter AS m1
WHERE  m0.ma_nr <= m1.ma_nr
GROUP  BY m0.ma_nr
ORDER  BY 1, 2

Der Offset von 3 bei Count(*) dient nur dazu, dass die Gruppen mit den niedrigsten Werten zuerst aufgefüllt werden.

Lösung mittels ntile()

SELECT ntile( 4 ) OVER ( ORDER BY ma_nr ) AS gruppe,
       ma_nr,
       ma_name
FROM   mitarbeiter

Die Lösung kann in diesem DBFiddle eingesehen werden.

gruppe ma_nr ma_name
1 7499 Allard
1 7698 Blank
1 7844 Dreher
1 7934 Müller
2 7369 Schmidt
2 7654 Mertens
2 7839 König
2 7902 Fuhrmann
3 7566 Johann
3 7788 Scheidt
3 7900 Jakobs
4 7521 Wecker
4 7782 Kühne
4 7876 Adam



Zurück zur Übersicht