Fönsterfunktioner
Fönsterfunktioner är en kategori av SQL-funktioner som utför beräkningar över en uppsättning rader relaterade till den aktuella raden inom ett definierat fönster eller partition.
De används för att utföra beräkningar och analyser över ett delmängd av rader utan att minska resultatmängden, till skillnad från aggregeringsfunktioner som vanligtvis minskar antalet rader som returneras av en fråga.
Förklaring
Antag att vi har följande Sales
-tabell:
Om vårt mål är att beräkna den totala intäkten för varje specifik produkt och visa det i en ytterligare kolumn i huvudtabellen istället för att skapa en ny grupperad tabell, kan resultatet se ut så här:
Men hur kan vi göra det?
Att använda GROUP BY
är inte lämpligt för denna uppgift eftersom denna klausul minskar antalet rader genom att gruppera dem enligt angivna kriterier, vilket resulterar i att endast ID:n och deras motsvarande summavärden returneras.
Det är därför fönsterfunktioner är avgörande för att lösa detta problem.
Implementering
Vi kan få det önskade resultatet med följande fråga:
1234567SELECT sales_id, product_id, sales_date, amount, SUM(amount) OVER (PARTITION BY product_id) AS Total_Revenue_Per_Product FROM Sales;
En allmän syntax för att skapa en fönsterfunktion kan beskrivas enligt följande:
SELECT
aggregation_func() OVER (
PARTITION BY partition_column
ORDER BY order_column
)
FROM
table_name;
- SELECT: Indikerar att en fråga ska påbörjas;
- aggregation_func(): Den aggregerande funktionen (t.ex.
SUM
,AVG
,COUNT
) som utför en beräkning över en uppsättning rader definierade av fönstret; - OVER: Nyckelord som introducerar fönsterfunktionen;
- PARTITION BY: Delar upp resultatmängden i partitioner baserat på värdena i de angivna kolumnerna. Fönsterfunktionen verkar separat på varje partition;
- partition_column: Kolumnen som används för att partitionera resultatmängden.
- ORDER BY: Anger ordningen på raderna inom varje partition;
- order_column: Kolumnen som används för att ordna raderna inom varje partition.
- FROM: Indikerar källtabellen från vilken data hämtas;
- table_name: Namnet på tabellen från vilken data väljs.
Tack för dina kommentarer!
Fråga AI
Fråga AI
Fråga vad du vill eller prova någon av de föreslagna frågorna för att starta vårt samtal
Awesome!
Completion rate improved to 4.35
Fönsterfunktioner
Svep för att visa menyn
Fönsterfunktioner är en kategori av SQL-funktioner som utför beräkningar över en uppsättning rader relaterade till den aktuella raden inom ett definierat fönster eller partition.
De används för att utföra beräkningar och analyser över ett delmängd av rader utan att minska resultatmängden, till skillnad från aggregeringsfunktioner som vanligtvis minskar antalet rader som returneras av en fråga.
Förklaring
Antag att vi har följande Sales
-tabell:
Om vårt mål är att beräkna den totala intäkten för varje specifik produkt och visa det i en ytterligare kolumn i huvudtabellen istället för att skapa en ny grupperad tabell, kan resultatet se ut så här:
Men hur kan vi göra det?
Att använda GROUP BY
är inte lämpligt för denna uppgift eftersom denna klausul minskar antalet rader genom att gruppera dem enligt angivna kriterier, vilket resulterar i att endast ID:n och deras motsvarande summavärden returneras.
Det är därför fönsterfunktioner är avgörande för att lösa detta problem.
Implementering
Vi kan få det önskade resultatet med följande fråga:
1234567SELECT sales_id, product_id, sales_date, amount, SUM(amount) OVER (PARTITION BY product_id) AS Total_Revenue_Per_Product FROM Sales;
En allmän syntax för att skapa en fönsterfunktion kan beskrivas enligt följande:
SELECT
aggregation_func() OVER (
PARTITION BY partition_column
ORDER BY order_column
)
FROM
table_name;
- SELECT: Indikerar att en fråga ska påbörjas;
- aggregation_func(): Den aggregerande funktionen (t.ex.
SUM
,AVG
,COUNT
) som utför en beräkning över en uppsättning rader definierade av fönstret; - OVER: Nyckelord som introducerar fönsterfunktionen;
- PARTITION BY: Delar upp resultatmängden i partitioner baserat på värdena i de angivna kolumnerna. Fönsterfunktionen verkar separat på varje partition;
- partition_column: Kolumnen som används för att partitionera resultatmängden.
- ORDER BY: Anger ordningen på raderna inom varje partition;
- order_column: Kolumnen som används för att ordna raderna inom varje partition.
- FROM: Indikerar källtabellen från vilken data hämtas;
- table_name: Namnet på tabellen från vilken data väljs.
Tack för dina kommentarer!