Datenbanken

Gruppenfunktionen und Subqueries

Arithmetische Ausdrücke, COUNT, SUM, AVG, MIN, MAX, GROUP BY, HAVING, NULL, NVL und Unterabfragen.

Gruppenfunktionen und Subqueries

SQL kann Daten nicht nur anzeigen, sondern auch zusammenfassen, berechnen und mit Unterabfragen auswerten.

Arithmetische Ausdrücke

In SELECT und WHERE können Berechnungen stehen.

SELECT ename, sal, comm, sal + comm
FROM emp
WHERE job = 'SALESMAN';

Problem: Wenn comm NULL ist, wird auch sal + comm zu NULL.

NULL und NVL

NULL bedeutet unbekannt oder nicht vorhanden.

Mit NVL kann ein Ersatzwert verwendet werden.

SELECT ename, job, sal, comm, sal + NVL(comm, 0) AS gesamt
FROM emp
WHERE deptno = 30;

Gruppenfunktionen

FunktionBedeutung
COUNTzählt Zeilen oder Werte
SUMsummiert Werte
AVGberechnet Durchschnitt
MINkleinster Wert
MAXgrößter Wert

Beispiele:

SELECT AVG(sal)
FROM emp
WHERE job = 'CLERK';
SELECT SUM(sal), SUM(comm)
FROM emp
WHERE job = 'SALESMAN';

COUNT

COUNT(*) zählt Zeilen.

SELECT COUNT(*)
FROM emp
WHERE deptno = 30;

COUNT(comm) zählt nur Zeilen, bei denen comm nicht NULL ist.

SELECT COUNT(comm)
FROM emp;

Unterschiedliche Werte zählen:

SELECT COUNT(DISTINCT job)
FROM emp
WHERE deptno = 30;

GROUP BY

GROUP BY bildet Gruppen gleicher Werte.

Durchschnittsgehalt pro Abteilung:

SELECT deptno, AVG(sal)
FROM emp
GROUP BY deptno;

Mehrere Gruppierungsspalten:

SELECT deptno, job, COUNT(*), 12 * AVG(sal)
FROM emp
GROUP BY deptno, job;

WHERE vs. HAVING

KlauselWirkt auf
WHEREeinzelne Zeilen vor der Gruppierung
HAVINGGruppen nach der Gruppierung

Beispiel:

SELECT job, COUNT(*), 12 * AVG(sal)
FROM emp
GROUP BY job
HAVING COUNT(*) > 2;

Geschachtelte Gruppenfunktionen

Beispiel: höchstes Durchschnittsgehalt über alle Abteilungen.

SELECT MAX(AVG(sal))
FROM emp
GROUP BY deptno;

Datumsfunktionen

Oracle-Beispiele aus den Unterlagen:

SELECT sysdate
FROM dual;
SELECT ename, hiredate, add_months(hiredate, 12) AS oneyear
FROM emp;
SELECT EXTRACT(MONTH FROM hiredate) AS monat, COUNT(*) AS anzahl
FROM emp
GROUP BY EXTRACT(MONTH FROM hiredate)
HAVING COUNT(*) > 2;

Subquery

Eine Subquery ist eine Abfrage innerhalb einer anderen Abfrage.

Beispiel: Mitarbeiter finden, die mehr als das Durchschnittsgehalt verdienen.

SELECT ename, sal
FROM emp
WHERE sal > (
  SELECT AVG(sal)
  FROM emp
);

Subqueries können in WHERE, FROM oder SELECT stehen.

Typische Fehler

  • WHERE statt HAVING für Gruppenbedingungen verwenden
  • Nicht gruppierte Spalten im SELECT ausgeben
  • COUNT(spalte) mit COUNT(*) verwechseln
  • NULL in Berechnungen vergessen
  • Subquery liefert mehrere Werte, obwohl nur ein Wert erwartet wird

Merksatz

Gruppenfunktionen verdichten Daten. Subqueries machen Abfragen abhängig von anderen Abfragen.

Zuletzt aktualisiert: 6. Juni 2026