Anwendungsbeispiele der SQL-Fensterfunktion over()

Ich habe kürzlich die Fensterfunktion verwendet, aber als ich lernen wollte, wie man sie lokal verwendet, war die Version des lokalen MySQL-Servers zu niedrig, um diese Funktion zu unterstützen. Deshalb habe ich sie aus den Blogs anderer Leute reproduziert und aufgezeichnet und werde sie im Detail wiederherstellen später.

Detaillierte Verwendung der Fensterfunktion

1. Syntax der Fensterfunktion

Die Syntax der Fensterfunktion lautet: over(partition by columns name 1 order by columns name 2). Nur eines der beiden Schlüsselwörter partition by und order by in Klammern darf vorkommen. Over() geht eine Funktion voraus. Wenn es sich um eine Aggregatfunktion handelt, kann order by nicht zusammen verwendet werden.

Zweitens beginnen wir mit der aggregierten Fensterfunktion sum(score) over(partition by name)

sum(score) over(partition by name)
sum() ist eine Aggregatfunktion. Tatsächlich habe ich die Aggregationsfunktion noch nicht gelernt. Wenn auf die Funktion sum() over() folgt, wird die Summenaggregationsfunktion zu a Fensterfunktion.
Der Inhalt der over()-Klammern definiert das Fenster und Partition bedeutet Partitionierung und Gruppierung. Partitionierung bedeutet Gruppierung nach einem bestimmten Feld.
Daher wird sum(score) over(partition by name) zuerst nach Namen gruppiert. Nach dem Hinzufügen von sum(score) vorn werden die Feldbewertungen in jedem (Gruppen-)Fenster entsprechend den gruppierten Ergebnissen summiert.

select *,sum(score)  over(partition by name) sum窗口函数举例
from kchs
-- 为了简单就只有两个字段,name和score

Fügen Sie hier eine Bildbeschreibung ein

Aggregationsfunktionen müssen die Daten ebenfalls sortieren, die Ranking-Ergebnisse werden jedoch nicht angezeigt. Die aktuellen Ranking-Daten und alle davor gerankten Daten werden entsprechend berechnet.

Anweisung ausführen:

select *,
sum(score) over (order by id) as 累加求和
from kchs

Fügen Sie hier eine Bildbeschreibung ein

Erweitern wir:
1. Viele Aggregatfunktionen können als Fensterfunktionsoperationen verwendet werden, z. B. SUM, AVG, MAX, MIN und COUNT.
Zweitens besteht der Unterschied zu graup by darin, dass die Fensterfunktion mehrere Zeilen generiert und nicht nur eine Zeile wie graup by.

3. Fensterfunktion erster_Wert, letzter_Wert, Vorsprung, Verzögerung
erster_Wert: Rufen Sie den ersten Wert im Fenster ab

first_value(score) over( partition by name)as first_score ,
-- 根据name分区(组),取score列的第一个值

last_value: Ruft den letzten Wert im Fenster ab

last_value(score) over(partition by name) as last_score
-- 根据name分区(组),取score列的最后一个值

Lead besteht darin, die oberen N-Daten der aktuellen Zeile zu übernehmen und einen Standardwert festzulegen

lead(score,1,0) over(partition by name ) as lead_score
-- 根据name分区(组),score列当前行的上面N行,,如果没有就为默认值0

Die Verzögerung besteht darin, die nächsten N Daten der aktuellen Zeile zu übernehmen und einen Standardwert festzulegen

lag(score,1,0) over(partition by name ) as lag_score 
--根据name分区(组),score列当前行的下面N行,如果没有就为默认值0

Fügen Sie hier eine Bildbeschreibung ein

Viertens legen die Ranking-Fensterfunktionen ROW_NUMBER, DENSE_RANK und RANK
row_number() eine kontinuierlich steigende Zahl (123456) für jede Zeilengruppe fest.

ROW_NUMBER() over( partition by name order by score asc)as ROW_NUMBER_score 

rank() ist eine Rangfolge und generiert außerdem eine Seriennummer für jede Zeilengruppe. Wenn dieselben Werte vorhanden sind, wird dieselbe Seriennummer generiert, und die folgenden Seriennummern sind nicht fortlaufend. Beispiel: Es gibt drei Personen, die den ersten Platz teilen, und die Nummer des vierten Platzes ist vier (111456).

rank() over(partition by name order by score asc) as RANK_score

DENSE_RANK() ähnelt RANK(), außer dass bei gleichen Sequenznummern die folgenden Sequenznummern nicht unterbrochen werden. Beispiel: Es gibt drei Personen, die den ersten Platz teilen, und die Nummer des vierten Platzes ist 2 (111234).

DENSE_RANK() over(partition by name order by score asc) as DENSE_RANK_score

Fügen Sie hier eine Bildbeschreibung ein

Hinweis:
1. Die Ranking-Fensterfunktion kann allein mit der ORDER BY-Anweisung oder gleichzeitig mit PARTITION BY verwendet werden.
2. ORDER BY gibt die Reihenfolge der Fensterfunktionen an. Die ORDER BY-Anweisung muss für die Reihenfolge der Fensterfunktionen verwendet werden.
Drittens wird PARTITION BY verwendet, um die Ergebnismenge zu gruppieren, und die Fensterfunktion wird auf jede Gruppe angewendet.

——————————————
Copyright-Erklärung: Dieser Artikel ist ein Originalartikel des CSDN-Bloggers „Sad and Crazy“ und folgt der CC 4.0 BY-SA-Copyright-Vereinbarung. Bitte fügen Sie den Original-Quelllink und dies bei Stellungnahme.
Ursprünglicher Link: https://blog.csdn.net/baomingshu/article/details/111945681

Supongo que te gusta

Origin blog.csdn.net/weixin_41674401/article/details/126211624
Recomendado
Clasificación