capypad
0 Tage Serie
sql / expert
Snippet

Abhängige abgeleitete Tabellen mit LATERAL

Ein LATERAL-Join ermöglicht es einer Unterabfrage in der FROM-Klausel, auf Spalten von vorhergehenden Tabellen in der Join-Reihenfolge zu verweisen. Dies erzeugt effektiv eine 'foreach'-Schleifenlogik in SQL und ermöglicht komplexe Berechnungen pro Zeile, wie das Finden der drei bestverdienenden Mitarbeiter für jede einzelne Abteilung in einer einzigen Abfrage.

snippet.sql
sql
1
2
3
4
5
6
7
8
9
SELECT d.department_name, top_earners.name
FROM departments d
CROSS JOIN LATERAL (
SELECT e.name
FROM employees e
WHERE e.department_id = d.id
ORDER BY e.salary DESC
FETCH FIRST 3 ROWS ONLY
) AS top_earners;
Erklärung
1
FROM departments d
Die Haupttabelle, die den Kontext für jede laterale Iteration liefert.
2
CROSS JOIN LATERAL (
Ermöglicht der Unterabfrage den Zugriff auf Spalten des zuvor definierten Alias 'd'.
3
WHERE e.department_id = d.id
Die Korrelationsbedingung, die Mitarbeiter basierend auf der aktuellen Abteilung filtert.
4
FETCH FIRST 3 ROWS ONLY
Begrenzt das Ergebnis der Unterabfrage auf die besten 3 Datensätze für jede Abteilungsiteration.