SQL: Verdichtete Klassen aufsummieren

Aus DBWiki
Wechseln zu: Navigation, Suche

Zurück zur Übersicht



Hier soll die Anzahl der Teilmengen bestimmt werden, die in eine Klasse fallen, wobei die Klassifizierung von einer Unterabfrage vorgenommen werden soll.


Es soll z.B. die Anzahl der Noten eines Mitarbeiters gezählt werden, wobei eine Note durch den Mittelwert aller Noten eines Seminars je Mitarbeiter bestimmt wird.

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 ma_nr,
       [note],
       count( * ) AS anz
FROM   ( SELECT sem_nr,
                ma_nr,
                Switch( [note] >= 22, 1,
                        [note] >= 19, 2,
                        [note] >= 16, 3,
                        [note] >= 13, 4,
                        [note] >= 10, 5,
                        [note] <  10, 6) AS [note]
         FROM   ( SELECT sem_nr,
                         ma_nr,
                         avg( punkte ) AS [note]
                  FROM   seminar
                  GROUP  BY sem_nr, ma_nr ) AS v0
         ) AS v1
GROUP  BY ma_nr, [note]

Allgemeine Lösung

SELECT ma_nr,
       CASE WHEN note >= 22 THEN 1 
            WHEN note >= 19 THEN 2
            WHEN note >= 16 THEN 3
            WHEN note >= 13 THEN 4
            WHEN note >= 10 THEN 5
            ELSE                 6 END AS note,
       COUNT( * ) AS anz
FROM   ( SELECT sem_nr,
                ma_nr,
                avg( punkte ) AS note 
         FROM   seminar 
         GROUP  BY sem_nr, ma_nr ) AS v
GROUP  BY ma_nr,
          CASE WHEN note >= 22 THEN 1 
               WHEN note >= 19 THEN 2
               WHEN note >= 16 THEN 3
               WHEN note >= 13 THEN 4
               WHEN note >= 10 THEN 5
               ELSE                 6 END
ORDER  BY ma_nr

Hier ist ein entsprechender DBFiddle.

ma_nr note anz
7499 5 1
7521 4 2
7654 2 1
7654 5 1



Zurück zur Übersicht