Gruppenfunktionen und Subqueries
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
| Funktion | Bedeutung |
|---|---|
COUNT | zählt Zeilen oder Werte |
SUM | summiert Werte |
AVG | berechnet Durchschnitt |
MIN | kleinster Wert |
MAX | größ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
| Klausel | Wirkt auf |
|---|---|
WHERE | einzelne Zeilen vor der Gruppierung |
HAVING | Gruppen 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
WHEREstattHAVINGfür Gruppenbedingungen verwenden- Nicht gruppierte Spalten im
SELECTausgeben COUNT(spalte)mitCOUNT(*)verwechselnNULLin 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