Database
 sql >> Datenbank >  >> RDS >> Database

Datentutorial:Verwenden von Fensterfunktionen

Was sind Fensterfunktionen?

Fensterfunktionen ermöglichen es Benutzern, Berechnungen mit Partitionen (d. h. Untergruppen oder Abschnitten) einer Ergebnismenge durchzuführen, typischerweise einer Tabelle oder den Ergebnissen einer anderen Abfrage. Im Gegensatz zu herkömmlichen Aggregationsfunktionen, die nur einen einzelnen Wert für jede in der Abfrage definierte Gruppe zurückgeben, geben Fensterfunktionen einen einzelnen Wert für jede Eingabezeile zurück.

Wie hilfreich sind Fensterfunktionen?

Fensterfunktionen erhöhen die Effizienz und reduzieren die Komplexität von Abfragen, die Partitionen (Fenster) eines Datensatzes analysieren, indem sie eine Alternative zu komplexeren SQL-Konzepten bieten, z. abgeleitete Abfragen. Häufige Anwendungsfälle sind:

  • Ranking-Ergebnisse innerhalb eines bestimmten Fensters (z. B. Ranking pro Gruppe)
  • Zugriff auf Daten aus einer anderen Zeile in einem bestimmten Fenster (z. B. periodische Berichte)
  • Aggregation innerhalb eines bestimmten Fensters (z. B. laufende Summen):

Wie man Fensterfunktionen verwendet

Fensterfunktionen werden mit dem OVER eingeleitet -Klausel und werden mit drei Konzepten konfiguriert:

  • Fensterpartition (PARTITION BY ) - gruppiert Zeilen in Partitionen
  • Fensterreihenfolge (ORDER BY ) - definiert die Reihenfolge oder Reihenfolge der Zeilen innerhalb jedes Fensters
  • Fensterrahmen (ROWS ) - definiert das Fenster durch Verwendung eines Offsets von der angegebenen Zeile

Syntaxübersicht

function (expression) OVER
     ( [ PARTITION BY expression_list ]
       [ ORDER BY order_list ]
       [ ROWS frame_clause ])

Definitionen

  • expression_list:Kommagetrennte Liste von Ausdrücken, normalerweise Spaltennamen
  • order_list:Kommagetrennte Liste von Ausdrücken, normalerweise Spaltennamen
  • frame_clause:Definiere den Offset mit CURRENT ROW , _value_ PRECEDING , UNBOUNDED PRECEDING , _value_ FOLLOWING , UNBOUNDED FOLLOWING

Beispiele

Ranking:Ranking pro Gruppe

SELECT
      campaign
    , month
    , total_cost
    , rank() OVER (PARTITION BY month ORDER BY month DESC, total_cost DESC) as "rank"
FROM Cost_by_Month
LIMIT 8

Vorherige Zeile:Zeitraum-über-Zeitraum-Analyse

SELECT
      campaign
    , month
    , total_cost
    , LAG(total_cost, 1) OVER (ORDER BY campaign, month) as "previous total cost"
FROM Cost_by_Month
WHERE campaign = 'TV'
LIMIT 4

Aggregation innerhalb eines Fensters:laufende Summen

SELECT
    campaign, month, monthly_cost
  , sum(monthly_cost) OVER (PARTITION BY campaign ORDER BY month ROWS BETWEEN UNBOUNDED
    PRECEDING and CURRENT ROW) as "running cost total"
FROM Cost_by_Month

Dokumentation &Funktionsliste:

Bitte beachten Sie, dass von Datenbank zu Datenbank geringfügige Unterschiede in der Verwendung und Syntax bestehen. Für spezifische Informationen zu Ihrer Implementierung verwenden Sie bitte die unten bereitgestellte quellenspezifische Dokumentation.

Postgres

  • Anleitung
  • Funktionen

Rotverschiebung

  • Anleitung
  • Funktionen

Oracle

  • Anleitung

SQLServer

  • Anleitung

BigQuery

  • Anleitung