SQL: Summierung klassifizierter Teilmengen
Aus DBWiki
Es soll z.B. für jeden Mitarbeiter die Note, die er erzielt hat und ihre Häufigkeitkeit ausgegeben 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.
In jet-SQL muss man als Zwischenschritt eine Unterabfrage erstellen, weil eine Gruppierung über die Switch()-Funktion nicht gelingt.
SELECT ma_nr, [note], count( * ) AS anz FROM ( SELECT ma_nr, Switch( punkte >= 22, 1, punkte >= 19, 2, punkte >= 16, 3, punkte >= 13, 4, punkte >= 10, 5, punkte < 10, 6) AS [note] FROM seminar) AS v GROUP BY ma_nr, [note]
Allgemeine Lösung
SELECT ma_nr, CASE WHEN punkte >= 22 THEN 1 WHEN punkte >= 19 THEN 2 WHEN punkte >= 16 THEN 3 WHEN punkte >= 13 THEN 4 WHEN punkte >= 10 THEN 5 ELSE 6 END note, COUNT( * ) AS anz FROM seminar GROUP BY ma_nr, CASE WHEN punkte >= 22 THEN 1 WHEN punkte >= 19 THEN 2 WHEN punkte >= 16 THEN 3 WHEN punkte >= 13 THEN 4 WHEN punkte >= 10 THEN 5 ELSE 6 END ORDER BY 1
Hier ist ein entsprechender DBFiddle.
ma_nr | note | anz |
---|---|---|
7499 | 4 | 2 |
7499 | 5 | 1 |
7521 | 3 | 2 |
7521 | 4 | 1 |
7521 | 5 | 2 |
7654 | 1 | 1 |
7654 | 2 | 2 |
7654 | 4 | 1 |
7654 | 5 | 2 |