Menu
Coddy logo textTech

Subqueries Part 2

Teil des Abschnitts Grundlagen der SQL-Journey von Coddy — Lektion 39 von 72.

Es gibt drei Hauptarten von Unterabfragen:

  1. Scalar Subqueries - Gibt einen einzelnen Wert zurück (eine Zeile, eine Spalte)
  2. Row Subqueries - Gibt eine einzelne Zeile mit mehreren Spalten zurück
  3. Table Subqueries - Gibt mehrere Zeilen und Spalten zurück

Zum Beispiel hier sind einige Anwendungsfälle für jeden Unterabfragetyp:

Skalare Unterabfrage - Mitarbeiter finden, die mehr als das durchschnittliche Gehalt verdienen:

SELECT name, salary
FROM employees
WHERE salary > (
    SELECT AVG(salary)
    FROM employees
);

Zeilen-Subquery – Finde Mitarbeiter mit derselben Abteilung und demselben Gehalt wie Alice

SELECT name
FROM employees
WHERE (department, salary) = (
    SELECT department, salary
    FROM employees
    WHERE name = 'Alice'
);

Tabellen-Subqueries - Abteilungen und ihre Mitarbeiteranzahl anzeigen

SELECT department, count
FROM (
    SELECT department, COUNT(*) as count
    FROM employees
    GROUP BY department
) as dept_counts;

Beachten Sie die Anwendungsfälle:

  • Skalar - Einfache Vergleiche (>, <, =)
  • Wenn Sie mehrere Spalten abgleichen müssen
  • Wenn Sie aus einem Ergebnissatz abfragen müssen
challenge icon

Aufgabe

Einfach

Verfügbare Tabellen und Spalten:

  • shop: price, quantity, category, list_date

Finde Kategorien, deren Gesamtmenge größer ist als der Durchschnitt aller Mengen im Shop.

Wichtig: Du musst eine Unterabfrage innerhalb der HAVING-Klausel verwenden, um den Durchschnitt zu berechnen. Verwende keinen fest codierten Wert oder eine separate Abfrage — die Unterabfrage sollte AVG(quantity) direkt aus der shop-Tabelle innerhalb von HAVING berechnen.

Schritte zur Lösung:

  1. Zuerst schreibe eine Unterabfrage, die den Durchschnitt von allen Mengen im Shop berechnet: SELECT AVG(quantity) FROM shop
  2. Dann summiere für jede Kategorie deren Mengen und vergleiche mit dieser Unterabfrage unter Verwendung des HAVING-Schlüsselworts

Spickzettel

Es gibt drei Haupttypen von Unterabfragen:

  1. Skalare Unterabfragen - Gibt einen einzelnen Wert zurück (eine Zeile, eine Spalte)
  2. Zeilenunterabfragen - Gibt eine einzelne Zeile mit mehreren Spalten zurück
  3. Tabellenunterabfragen - Gibt mehrere Zeilen und Spalten zurück

Skalare Unterabfrage - Einfache Vergleiche (>, <, =):

SELECT name, salary
FROM employees
WHERE salary > (
    SELECT AVG(salary)
    FROM employees
);

Zeilenunterabfrage - Abgleich mehrerer Spalten:

SELECT name
FROM employees
WHERE (department, salary) = (
    SELECT department, salary
    FROM employees
    WHERE name = 'Alice'
);

Tabellenunterabfrage - Abfrage aus einem Ergebnissatz:

SELECT department, count
FROM (
    SELECT department, COUNT(*) as count
    FROM employees
    GROUP BY department
) as dept_counts;

Probier es selbst

quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Grundlagen