Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lära Fönsterfunktioner | Några Ytterligare Ämnen
SQL-optimering och Frågefunktioner

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:

12
SELECT * 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:

1234567
SELECT sales_id, product_id, sales_date, amount, SUM(amount) OVER (PARTITION BY product_id) AS Total_Revenue_Per_Product FROM Sales;
Beskrivning av frågan
expand arrow
  • 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, Amount och Total_Revenue_Per_Product från tabellen sales, där Total_Revenue_Per_Product representerar 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.
question mark

Vilken klausul används för att definiera partitioneringen av en fönsterfunktion?

Vänligen välj det korrekta svaret

Var allt tydligt?

Hur kan vi förbättra det?

Tack för dina kommentarer!

Avsnitt 3. Kapitel 2

Fråga AI

expand

Fråga AI

ChatGPT

Fråga vad du vill eller prova någon av de föreslagna frågorna för att starta vårt samtal

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:

12
SELECT * 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:

1234567
SELECT sales_id, product_id, sales_date, amount, SUM(amount) OVER (PARTITION BY product_id) AS Total_Revenue_Per_Product FROM Sales;
Beskrivning av frågan
expand arrow
  • 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, Amount och Total_Revenue_Per_Product från tabellen sales, där Total_Revenue_Per_Product representerar 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.
Var allt tydligt?

Hur kan vi förbättra det?

Tack för dina kommentarer!

Avsnitt 3. Kapitel 2
some-alt