SQL: Summierung klassifizierter Teilmengen

Aus DBWiki
Wechseln zu: Navigation, Suche

Zurück zur Übersicht



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



Zurück zur Übersicht