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:
12SELECT * FROM sales
Om vårt mål är att beräkna total intäkt för varje specifik produkt och visa det i en extra 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 hantera 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;
- Funktionsnamn:
SUM - Beskrivning: Beräknar summan av en angiven kolumn inom ett definierat fönster.
- Argument:
Amount: Kolumnen som ska summeras.
- Fönsterfunktion:
- OVER: Anger det fönster där aggregeringen utförs.
- PARTITION BY Product_ID: Delar upp resultatmängden i partitioner baserat på värdena i kolumnen
Product_ID. Summan beräknas separat för varje partition.
- Alias:
Total_Revenue_Per_Product: Namnet som tilldelas den beräknade summan för varje partition. - Användning: Denna funktion används för att beräkna den totala intäkten per produkt genom att summera beloppen för varje produkt-ID.
- Resultat: Resultatmängden inkluderar kolumnerna
Sales_ID,Product_ID,Sales_Date,AmountochTotal_Revenue_Per_Productfrån tabellensales, därTotal_Revenue_Per_Productrepresenterar den totala intäkten för varje produkt-ID. - Sortering: Resultatmängden är sorterad efter
Sales_Date.
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(): aggregatfunktionen (t.ex.
SUM,AVG,COUNT) som utför en beräkning över en uppsättning rader definierad 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 arbetar 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