Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Oppiskele Ikkunafunktiot | Joitakin Lisäaiheita
SQL-optimointi ja kyselyominaisuudet

Ikkunafunktiot

Pyyhkäise näyttääksesi valikon

Ikkunafunktiot ovat SQL-funktioiden kategoria, jotka suorittavat laskelmia joukolle rivejä, jotka liittyvät nykyiseen riviin määritellyssä ikkunassa tai osiossa.
Niitä käytetään laskentaan ja analyysiin rivijoukon yli vähentämättä tulosjoukon kokoa, toisin kuin aggregaattifunktiot, jotka yleensä vähentävät kyselyn palauttamien rivien määrää.

Selitys

Oletetaan, että meillä on seuraava Sales-taulu:

12
SELECT * FROM sales

Jos tavoitteena on laskea kokonaismyynti jokaiselle tietylle tuotteelle ja näyttää se lisäsarakkeena päätaulussa uuden ryhmitellyn taulun sijaan, lopputulos voisi näyttää seuraavalta:

Mutta miten tämä voidaan tehdä?
GROUP BY-lauseen käyttö ei sovellu tähän tehtävään, koska tämä lause vähentää rivien määrää ryhmittelemällä ne määriteltyjen ehtojen mukaan, jolloin palautetaan vain tunnisteet ja niiden vastaavat summa-arvot.

Siksi ikkuna­funktiot ovat olennaisia tämän ongelman ratkaisemiseksi.

Toteutus

Tarvittava tulos voidaan saada seuraavalla kyselyllä:

1234567
SELECT sales_id, product_id, sales_date, amount, SUM(amount) OVER (PARTITION BY product_id) AS Total_Revenue_Per_Product FROM Sales;
Kyselyn kuvaus
expand arrow
  • Funktiotunnus: SUM
  • Kuvaus: Laskee määritellyn sarakkeen summan annetussa ikkunassa.
  • Argumentit:
    • Amount: Summattava sarake.
  • Ikkunafunktio:
    • OVER: Määrittää ikkunan, jossa aggregointi suoritetaan.
    • PARTITION BY Product_ID: Jakaa tulosjoukon osioihin Product_ID-sarakkeen arvojen perusteella. Summa lasketaan erikseen jokaiselle osiolle.
  • Alias: Total_Revenue_Per_Product: Lasketun summan nimi kullekin osiolle.
  • Käyttötarkoitus: Tätä funktiota käytetään tuotekohtaisen kokonaismyynnin laskemiseen summaamalla kunkin tuotetunnuksen määrät.
  • Tulos: Tulosjoukko sisältää sarakkeet Sales_ID, Product_ID, Sales_Date, Amount ja Total_Revenue_Per_Product taulusta sales, jossa Total_Revenue_Per_Product edustaa kunkin tuotetunnuksen kokonaismyyntiä.
  • Järjestys: Tulosjoukko järjestetään Sales_Date-sarakkeen mukaan.

Yleinen syntaksi ikkunafunktion luomiselle voidaan kuvata seuraavasti:

SELECT 
    aggregation_func() OVER (
        PARTITION BY partition_column
        ORDER BY order_column
    )
FROM 
    table_name;
  • SELECT: osoittaa, että kysely alkaa;
  • aggregation_func(): aggregaattifunktio (esim. SUM, AVG, COUNT), joka suorittaa laskennan ikkunan määrittämälle rivijoukolle;
  • OVER: avainsana, joka esittelee ikkunafunktion;
  • PARTITION BY: jakaa tulosjoukon osioihin määritettyjen sarakkeiden arvojen perusteella. Ikkunafunktio toimii erikseen jokaisessa osiossa;
    • partition_column: sarake, jota käytetään tulosjoukon osiointiin.
  • ORDER BY: määrittää rivien järjestyksen kussakin osiossa;
    • order_column: sarake, jota käytetään rivien järjestämiseen kussakin osiossa.
  • FROM: osoittaa lähdetaulun, josta tiedot haetaan;
    • table_name: taulun nimi, josta tietoja valitaan.
question mark

Mitä lauseketta käytetään määrittämään ikkunafunktion osiointi?

Valitse oikea vastaus

Oliko kaikki selvää?

Miten voimme parantaa sitä?

Kiitos palautteestasi!

Osio 3. Luku 2

Kysy tekoälyä

expand

Kysy tekoälyä

ChatGPT

Kysy mitä tahansa tai kokeile jotakin ehdotetuista kysymyksistä aloittaaksesi keskustelumme

Ikkunafunktiot

Ikkunafunktiot ovat SQL-funktioiden kategoria, jotka suorittavat laskelmia joukolle rivejä, jotka liittyvät nykyiseen riviin määritellyssä ikkunassa tai osiossa.
Niitä käytetään laskentaan ja analyysiin rivijoukon yli vähentämättä tulosjoukon kokoa, toisin kuin aggregaattifunktiot, jotka yleensä vähentävät kyselyn palauttamien rivien määrää.

Selitys

Oletetaan, että meillä on seuraava Sales-taulu:

12
SELECT * FROM sales

Jos tavoitteena on laskea kokonaismyynti jokaiselle tietylle tuotteelle ja näyttää se lisäsarakkeena päätaulussa uuden ryhmitellyn taulun sijaan, lopputulos voisi näyttää seuraavalta:

Mutta miten tämä voidaan tehdä?
GROUP BY-lauseen käyttö ei sovellu tähän tehtävään, koska tämä lause vähentää rivien määrää ryhmittelemällä ne määriteltyjen ehtojen mukaan, jolloin palautetaan vain tunnisteet ja niiden vastaavat summa-arvot.

Siksi ikkuna­funktiot ovat olennaisia tämän ongelman ratkaisemiseksi.

Toteutus

Tarvittava tulos voidaan saada seuraavalla kyselyllä:

1234567
SELECT sales_id, product_id, sales_date, amount, SUM(amount) OVER (PARTITION BY product_id) AS Total_Revenue_Per_Product FROM Sales;
Kyselyn kuvaus
expand arrow
  • Funktiotunnus: SUM
  • Kuvaus: Laskee määritellyn sarakkeen summan annetussa ikkunassa.
  • Argumentit:
    • Amount: Summattava sarake.
  • Ikkunafunktio:
    • OVER: Määrittää ikkunan, jossa aggregointi suoritetaan.
    • PARTITION BY Product_ID: Jakaa tulosjoukon osioihin Product_ID-sarakkeen arvojen perusteella. Summa lasketaan erikseen jokaiselle osiolle.
  • Alias: Total_Revenue_Per_Product: Lasketun summan nimi kullekin osiolle.
  • Käyttötarkoitus: Tätä funktiota käytetään tuotekohtaisen kokonaismyynnin laskemiseen summaamalla kunkin tuotetunnuksen määrät.
  • Tulos: Tulosjoukko sisältää sarakkeet Sales_ID, Product_ID, Sales_Date, Amount ja Total_Revenue_Per_Product taulusta sales, jossa Total_Revenue_Per_Product edustaa kunkin tuotetunnuksen kokonaismyyntiä.
  • Järjestys: Tulosjoukko järjestetään Sales_Date-sarakkeen mukaan.

Yleinen syntaksi ikkunafunktion luomiselle voidaan kuvata seuraavasti:

SELECT 
    aggregation_func() OVER (
        PARTITION BY partition_column
        ORDER BY order_column
    )
FROM 
    table_name;
  • SELECT: osoittaa, että kysely alkaa;
  • aggregation_func(): aggregaattifunktio (esim. SUM, AVG, COUNT), joka suorittaa laskennan ikkunan määrittämälle rivijoukolle;
  • OVER: avainsana, joka esittelee ikkunafunktion;
  • PARTITION BY: jakaa tulosjoukon osioihin määritettyjen sarakkeiden arvojen perusteella. Ikkunafunktio toimii erikseen jokaisessa osiossa;
    • partition_column: sarake, jota käytetään tulosjoukon osiointiin.
  • ORDER BY: määrittää rivien järjestyksen kussakin osiossa;
    • order_column: sarake, jota käytetään rivien järjestämiseen kussakin osiossa.
  • FROM: osoittaa lähdetaulun, josta tiedot haetaan;
    • table_name: taulun nimi, josta tietoja valitaan.
Oliko kaikki selvää?

Miten voimme parantaa sitä?

Kiitos palautteestasi!

Osio 3. Luku 2
some-alt