Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Oppiskele Ikkunafunktioiden Tyypit | Joitakin Lisäaiheita
Edistyneet SQL-Tekniikat

bookIkkunafunktioiden Tyypit

Tarkastellaan lyhyesti tärkeimpiä SQL:ssä käytettäviä ikkuna­funktioiden tyyppejä.

Aggregaattifunktiot

Nämä ovat tavanomaisia aggregaattifunktioita (AVG, SUM, MAX, MIN, COUNT), joita käytetään ikkuna­kontekstissa. Olemme jo käyttäneet tämän tyyppistä ikkuna­funktiota edellisessä luvussa.

Järjestysfunktiot

Järjestysfunktiot SQL:ssä ovat ikkuna­funktioita, joiden avulla voidaan antaa järjestysluku jokaiselle riville tulosjoukon osiossa. Näistä funktioista on paljon hyötyä järjestettyjen laskentojen ja analyysien tekemisessä.

  • RANK(): Antaa yksilöllisen järjestysluvun jokaiselle erilaiselle riville osiossa ORDER BY -ehdon perusteella. Samat arvot saavat saman järjestysluvun, ja järjestysluvuissa voi olla aukkoja;

  • DENSE_RANK(): Kuten RANK(), mutta ilman aukkoja järjestysluvuissa;

  • NTILE(n): Jakaa järjestetyn osion rivit n ryhmään ja antaa jokaiselle riville ryhmänumeron.

Esimerkki

Järjestämme myynnit Amount-kentän perusteella kullekin ProductID:lle nousevassa järjestyksessä käyttäen DENSE_RANK() -funktiota:

12345678
SELECT sales_id, product_id, sales_date, amount, DENSE_RANK() OVER (PARTITION BY product_id ORDER BY amount DESC) AS dense_rank_amount FROM Sales;
copy

Tulostaulu sisältää kaikki tiedot päätaulusta sekä lisäsarakkeen, joka näyttää kunkin myynnin järjestyksen kyseiselle tuotteelle.

Arvovertailufunktiot

Arvovertailuikkunafunktioita SQL:ssä käytetään vertailemaan nykyisen rivin arvoja muiden rivien arvoihin saman osion sisällä.
Nämä funktiot ovat erityisen hyödyllisiä trendejä analysoitaessa, laskelmissa vierekkäisten rivien perusteella tai tiettyjen riviarvojen hakemisessa määritellystä ikkunasta. SQL:ssä on useita arvovertailufunktioita:

  • LAG(): Hakee arvon edellisestä rivistä tulosjoukossa ilman tarvetta itseyhdistelyyn;
  • LEAD(): Hakee arvon seuraavasta rivistä tulosjoukossa ilman tarvetta itseyhdistelyyn;
  • FIRST_VALUE(): Palauttaa ensimmäisen rivin arvon ikkunakehyksessä;
  • LAST_VALUE(): Palauttaa viimeisen rivin arvon ikkunakehyksessä.

Esimerkki

Käytetään LAG()-arvovertailuikkunafunktiota myyntimäärän muutoksen laskemiseen edelliseen myyntiin verrattuna jokaiselle tuotteelle:

1234567891011
SELECT sales_id, product_id, sales_date, amount, LAG(amount, 1) OVER (PARTITION BY product_id ORDER BY sales_date) AS previous_amount, amount - LAG(amount, 1) OVER (PARTITION BY product_id ORDER BY sales_date) AS amount_change FROM Sales ORDER BY product_id, sales_date;
copy

Tämän ansiosta voimme helposti hakea tietoa myyntierojen kehityksestä jokaiselle tuotteelle ilman alikyselyitä tai tallennettuja proseduureja.
Voimme myös laskea erotukset kaikille myynneille ilman ositusta seuraavalla kyselyllä:

123456789
SELECT sales_id, product_id, sales_date, amount, LAG(amount, 1) OVER (ORDER BY sales_date) AS previous_amount, amount - LAG(amount, 1) OVER (ORDER BY sales_date) AS amount_change FROM Sales;
copy

Voit huomata, että emme sisällyttäneet PARTITION BY -lausetta OVER-lohkoon. Tämä tarkoittaa, että emme halua hakea edellisiä arvoja vain tietylle tuotteelle, vaan kaikille myynneille taulussa.

question mark

Mitä 'NTILE()' -funktio tekee SQL:ssä?

Select the correct answer

Oliko kaikki selvää?

Miten voimme parantaa sitä?

Kiitos palautteestasi!

Osio 3. Luku 4

Kysy tekoälyä

expand

Kysy tekoälyä

ChatGPT

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

Suggested prompts:

Can you explain the difference between RANK() and DENSE_RANK() in more detail?

What are some practical use cases for value comparison window functions like LAG() and LEAD()?

Could you provide more examples of window functions in SQL?

Awesome!

Completion rate improved to 4.35

bookIkkunafunktioiden Tyypit

Pyyhkäise näyttääksesi valikon

Tarkastellaan lyhyesti tärkeimpiä SQL:ssä käytettäviä ikkuna­funktioiden tyyppejä.

Aggregaattifunktiot

Nämä ovat tavanomaisia aggregaattifunktioita (AVG, SUM, MAX, MIN, COUNT), joita käytetään ikkuna­kontekstissa. Olemme jo käyttäneet tämän tyyppistä ikkuna­funktiota edellisessä luvussa.

Järjestysfunktiot

Järjestysfunktiot SQL:ssä ovat ikkuna­funktioita, joiden avulla voidaan antaa järjestysluku jokaiselle riville tulosjoukon osiossa. Näistä funktioista on paljon hyötyä järjestettyjen laskentojen ja analyysien tekemisessä.

  • RANK(): Antaa yksilöllisen järjestysluvun jokaiselle erilaiselle riville osiossa ORDER BY -ehdon perusteella. Samat arvot saavat saman järjestysluvun, ja järjestysluvuissa voi olla aukkoja;

  • DENSE_RANK(): Kuten RANK(), mutta ilman aukkoja järjestysluvuissa;

  • NTILE(n): Jakaa järjestetyn osion rivit n ryhmään ja antaa jokaiselle riville ryhmänumeron.

Esimerkki

Järjestämme myynnit Amount-kentän perusteella kullekin ProductID:lle nousevassa järjestyksessä käyttäen DENSE_RANK() -funktiota:

12345678
SELECT sales_id, product_id, sales_date, amount, DENSE_RANK() OVER (PARTITION BY product_id ORDER BY amount DESC) AS dense_rank_amount FROM Sales;
copy

Tulostaulu sisältää kaikki tiedot päätaulusta sekä lisäsarakkeen, joka näyttää kunkin myynnin järjestyksen kyseiselle tuotteelle.

Arvovertailufunktiot

Arvovertailuikkunafunktioita SQL:ssä käytetään vertailemaan nykyisen rivin arvoja muiden rivien arvoihin saman osion sisällä.
Nämä funktiot ovat erityisen hyödyllisiä trendejä analysoitaessa, laskelmissa vierekkäisten rivien perusteella tai tiettyjen riviarvojen hakemisessa määritellystä ikkunasta. SQL:ssä on useita arvovertailufunktioita:

  • LAG(): Hakee arvon edellisestä rivistä tulosjoukossa ilman tarvetta itseyhdistelyyn;
  • LEAD(): Hakee arvon seuraavasta rivistä tulosjoukossa ilman tarvetta itseyhdistelyyn;
  • FIRST_VALUE(): Palauttaa ensimmäisen rivin arvon ikkunakehyksessä;
  • LAST_VALUE(): Palauttaa viimeisen rivin arvon ikkunakehyksessä.

Esimerkki

Käytetään LAG()-arvovertailuikkunafunktiota myyntimäärän muutoksen laskemiseen edelliseen myyntiin verrattuna jokaiselle tuotteelle:

1234567891011
SELECT sales_id, product_id, sales_date, amount, LAG(amount, 1) OVER (PARTITION BY product_id ORDER BY sales_date) AS previous_amount, amount - LAG(amount, 1) OVER (PARTITION BY product_id ORDER BY sales_date) AS amount_change FROM Sales ORDER BY product_id, sales_date;
copy

Tämän ansiosta voimme helposti hakea tietoa myyntierojen kehityksestä jokaiselle tuotteelle ilman alikyselyitä tai tallennettuja proseduureja.
Voimme myös laskea erotukset kaikille myynneille ilman ositusta seuraavalla kyselyllä:

123456789
SELECT sales_id, product_id, sales_date, amount, LAG(amount, 1) OVER (ORDER BY sales_date) AS previous_amount, amount - LAG(amount, 1) OVER (ORDER BY sales_date) AS amount_change FROM Sales;
copy

Voit huomata, että emme sisällyttäneet PARTITION BY -lausetta OVER-lohkoon. Tämä tarkoittaa, että emme halua hakea edellisiä arvoja vain tietylle tuotteelle, vaan kaikille myynneille taulussa.

question mark

Mitä 'NTILE()' -funktio tekee SQL:ssä?

Select the correct answer

Oliko kaikki selvää?

Miten voimme parantaa sitä?

Kiitos palautteestasi!

Osio 3. Luku 4
some-alt