capypad
0 Tage Serie
sql / expert
Snippet

Lateral Derived Tables für zeilenweise Berechnungen

Das Schlüsselwort LATERAL (Teil von ANSI SQL) ermöglicht es einer Unterabfrage in der FROM-Klausel, auf Spalten vorangehender Tabellen in derselben FROM-Klausel zu verweisen. Dies ist äußerst nützlich für 'Top-N pro Gruppe'-Abfragen oder komplexe Berechnungen pro Zeile, die Kontext aus der äußeren Tabelle benötigen.

snippet.sql
sql
1
2
3
4
5
6
7
8
9
SELECT u.name, top_order.amount
FROM users u
CROSS JOIN LATERAL (
SELECT amount
FROM orders o
WHERE o.user_id = u.id
ORDER BY o.amount DESC
FETCH FIRST 1 ROW ONLY
) AS top_order;
Erklärung
1
CROSS JOIN LATERAL (
Initiiert einen lateralen Join, wodurch die Unterabfrage 'u.id' sehen kann.
2
WHERE o.user_id = u.id
Referenziert die Spalte der äußeren Tabelle innerhalb des Unterabfrage-Scopes.
3
FETCH FIRST 1 ROW ONLY
Begrenzt den Ergebnissatz für jeden spezifischen Benutzer auf dessen höchste Bestellung.