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
Avancerade Tekniker i SQL

bookFö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:

1234567
SELECT sales_id, product_id, sales_date, amount, SUM(amount) OVER (PARTITION BY product_id) AS Total_Revenue_Per_Product FROM Sales;
copy

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.
question mark

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

Select the correct answer

Var allt tydligt?

Hur kan vi förbättra det?

Tack för dina kommentarer!

Avsnitt 3. Kapitel 3

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

Awesome!

Completion rate improved to 4.35

bookFö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:

1234567
SELECT sales_id, product_id, sales_date, amount, SUM(amount) OVER (PARTITION BY product_id) AS Total_Revenue_Per_Product FROM Sales;
copy

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.
question mark

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

Select the correct answer

Var allt tydligt?

Hur kan vi förbättra det?

Tack för dina kommentarer!

Avsnitt 3. Kapitel 3
some-alt