Subqueries Part 2
Teil des Abschnitts Grundlagen der SQL-Journey von Coddy — Lektion 39 von 72.
Es gibt drei Hauptarten von Unterabfragen:
- Scalar Subqueries - Gibt einen einzelnen Wert zurück (eine Zeile, eine Spalte)
- Row Subqueries - Gibt eine einzelne Zeile mit mehreren Spalten zurück
- 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
Aufgabe
EinfachVerfü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:
- Zuerst schreibe eine Unterabfrage, die den Durchschnitt von allen Mengen im Shop berechnet:
SELECT AVG(quantity) FROM shop - 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:
- Skalare Unterabfragen - Gibt einen einzelnen Wert zurück (eine Zeile, eine Spalte)
- Zeilenunterabfragen - Gibt eine einzelne Zeile mit mehreren Spalten zurück
- 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
Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Grundlagen
4More Keywords
The IN keywordThe BETWEEN keywordThe LIKE keywordThe AS keywordRecap - Cellphone Models2Conditions
Conditions BasicsThe AND keywordThe OR keywordThe NOT keywordMultiple Conditions CombinedParenthesisBooleans5Arithmetic Operations
Mathematical OperatorsMathematical ColumnsThe Modulo OperationThe ROUND() Function3Specific Return Format
Null valuesSort Results Part 1Sort Results Part 2Recap - Cyber Security FirmLimit number of recordsRecap - Vehicle Factory6Intro Challenges
Recap - Parliamentary ElectionRecap - Police Criminal ArrestRecap - Bar Beverage ContainerRecap - Engineer new columns