Kaltaisesi lukijat auttavat tukemaan MUO: ta. Kun teet ostoksen käyttämällä sivustollamme olevia linkkejä, voimme ansaita kumppanipalkkion. Lue lisää.

SQL: n monipuolisuus DBMS-kyselykielenä on kasvanut vuosien varrella. Sen laaja hyödyllisyys ja monipuolisuus tekevät siitä kaikkien aikojen suosikin jokaiselle data-analyytikolle.

SQL: n tavallisten toimintojen lisäksi on olemassa useita edistyneen tason toimintoja. Nämä toiminnot tunnetaan yleisesti ikkunafunktioina. Jos käsittelet monimutkaisia ​​tietoja ja haluat suorittaa edistyneitä laskelmia, voit käyttää niitä hyödyntääksesi tietojasi parhaalla mahdollisella tavalla.

Ikkunatoimintojen merkitys

SQL: ssä on saatavilla useita ikkunatoimintoja, joista jokainen auttaa sinua suorittamaan sarjan laskutoimituksia. Osioiden luomisesta rivien järjestykseen tai rivinumeroiden määrittämiseen nämä ikkunatoiminnot tekevät vähän kaikkea.

Ikkunafunktiot ovat hyödyllisiä, kun käytät koostefunktioita tietylle tietojoukolle tai rivijoukolle. Nämä toiminnot ylittävät GROUP BY: n tarjoamien yhdistämistoimintojen lisäksi. Suurin ero on kuitenkin se, että toisin kuin ryhmittelytoiminnossa, tietojasi ei yhdistetä yhdeksi riviksi.

instagram viewer

Et voi käyttää ikkunatoimintoja sisällä MISSÄ, FROM, ja GROUP BY lausunnot.

Ikkunafunktion syntaksi

Kun viittaat mihin tahansa ikkunatoimintoon, sinun on noudatettava oletussyntaksirakennetta, jotta se toimii oikein. Jos rakentelet komennon väärin, saat virheilmoituksen ja koodisi ei toimi.

Tässä oletussyntaksi:

VALITSE sarakkeen nimi1,
{window_function}(sarakkeen nimi2)
YLI([OSIO sarakkeen nimi1] [ORDER BY sarakkeen nimi3]) AS uusi_sarake
FROM taulukon_nimi;

Missä:

  • sarakkeen nimi1 on ensimmäinen sarakkeen nimi, jonka haluat valita.
  • {window_function} on koontifunktion nimi, kuten summa, keskiarvo, määrä, rivin_numero, sijoitus tai tiheys_sijoitus.
  • sarakkeen nimi2 on sen sarakkeen nimi, jossa käytät ikkunatoimintoa.
  • sarakkeen nimi3 on kolmannen sarakkeen nimi, joka muodostaa osion perustan.
  • uusi_sarake on uuden sarakkeen tunniste, jonka voit käyttää käyttämällä KUTEN avainsana.
  • taulukon_nimi on lähdetaulukon nimi.

Ikkunatoiminnot eroavat joistakin yleisimmät SQL-komennot. Toisin kuin SQL: n aggregaattifunktiot, voit käyttää näitä ikkunatoimintoja lisätoimintojen suorittamiseen.

Tietojoukon valmistelu

Voit käyttää LUO TAULU lausunto Luo uusi taulukko SQL: llä. Tässä on esimerkkitietojoukko, jota tämä opas käyttää joidenkin ikkunatoimintojen määrittämiseen:

Tilauspäivämäärä

Kategoria

Väri

Myyntihinta

Määrä

08-11-2016

Puhelimet

Musta

907.152

6

12-06-2016

Sideaineet

Vihreä

18.504

3

11-10-2015

Kodinkoneet

Keltainen

114.9

5

11-10-2015

Taulukot

Ruskea

1706.184

9

09-06-2014

Puhelimet

Punainen

911.424

4

09-06-2014

Paperi

Valkoinen

15.552

3

09-06-2014

Sideaineet

Musta

407.976

3

09-06-2014

Kodinkoneet

Keltainen

68.81

5

09-06-2014

Sideaineet

Vihreä

2.544

3

09-06-2014

Varastointi

Oranssi

665.88

6

09-06-2014

Varastointi

Oranssi

55.5

2

15-04-2017

Puhelimet

Musta

213.48

3

05-12-2016

Sideaineet

Vihreä

22.72

4

22-11-2015

Kodinkoneet

Vihreä

60.34

7

22-11-2015

Tuolit

Tumman ruskea

71.372

2

13-05-2014

Huonekalut

Oranssi

190.92

5

Summafunktio selitettynä

Oletetaan, että haluat laskea kokonaismyynnin kullekin luokkasarakkeen arvolle. Näin voit tehdä sen:

VALITSEkategoria, väri,
summa (alennushinta)
YLI (järjestys luokan mukaan) AS total_sales
FROM sahil.sample;

Yllä olevassa koodissa SQL-käsky hakee luokan ja värin alkuperäisestä tietojoukosta. Summafunktio laskee yhteen sale_price-sarakkeen. Se tekee sen luokittain, koska OVER-lause määrittää järjestyksen luokkasarakkeen mukaan. Lopputulos on seuraava:

Avg()-ikkunafunktion käyttäminen

Kuten summafunktiossa, voit laskea datarivin keskiarvon käyttämällä keskim toiminto. Summan sijasta saat sarakkeen, jossa on keskimääräinen myynti.

VALITSEkategoria, väri,
keskim. (alennushinta)
YLI (järjestys luokan mukaan) AS avg_sales
FROM sahil.sample;

Opi käyttämään Count()-ikkunafunktiota

Summa- ja avg-funktioiden tapaan SQL: n laskuikkunatoiminto on melko suoraviivainen ja toimii samoilla linjoilla kuin kaksi muuta funktiota. Kun ohitat laskentafunktion, saat kunkin arvon kokonaismäärän uudessa sarakkeessa.

Näin voit laskea määrän:

VALITSEkategoria, väri,
määrä (luokka)
YLI (järjestys luokan mukaan) AS item_count
FROM sahil.sample;

Rivi_numero()-ikkunafunktio

Toisin kuin jotkin muut yllä luetellut ikkunatoiminnot, rivi_numero() toimii hieman eri tavalla. Funktio row_number() määrittää jokaiselle riville rivinumeron lausekohtaisen järjestyksen mukaan. Aloitusrivin numero on 1; rivin_numero määrittää jokaiselle riville vastaavan arvon loppuun asti.

Tässä on row_number()-funktion perusrakenne:

VALITSEkategoria, väri,
rivin_numero()
YLI (järjestys luokan mukaan) AS item_number
FROM sahil.sample;

Mutta mitä tapahtuu, jos haluat määrittää erilliset rivinumerot kullekin luokkakohteelle? Yllä oleva syntaksi asettaa rullaavan sarjanumeron luokkaan tallennetuista kohteista riippumatta. Esimerkiksi kodinkoneiden luokassa tulisi olla yksinomainen numerointi, jota seuraa sideaineet ja niin edelleen.

Voit käyttää osio suorittaa tämän yksinkertaisen mutta käytännöllisen tehtävän. Osioavainsana määrittää määritetyt rivinumerot kunkin luokkakohteen perusteella.

VALITSEkategoria, väri,
rivin_numero()
OVER (osio luokan mukaan järjestys luokan mukaan) AS item_number
FROM sahil.sample;

Rank()- ja Dense_Rank()-funktiot

The rank() toiminto toimii eri tavalla kuin rivin_numero() toiminto. Sinun on määritettävä sarakkeen nimi järjestyksen sisällä funktioittain, jotta voit käyttää sitä perustana järjestysarvojen määrittämiseen. Esimerkiksi seuraavassa koodiesimerkissä voit käyttää värisaraketta järjestyksen mukaan funktioittain. Kysely käyttää sitten tätä järjestystä määrittääkseen sijoitusarvon jokaiselle riville.

Voit käyttää alla olevaa koodin syntaksia välittääksesi rank-funktion SQL: ssä:

VALITSEkategoria, väri,
rank()
YLI (järjestys värin mukaan) AS item_rank
FROM sahil.sample;

Katso tulostetta ymmärtääksesi, kuinka tämä toiminto toimii.

Järjestys funktion mukaan lajittelee väriluokan, kun taas järjestystoiminto määrittää arvon jokaiselle värille. Kaikilla samoilla väriarvoilla on kuitenkin sama arvo, kun taas eri väreillä on erilliset arvot. Musta väri esiintyy tietojoukossa kolmesti; sen sijaan, että määrittäisit arvon 1, 2 ja 3, mustat värit saavat arvon 1.

Seuraava väri ruskea saa kuitenkin sijoituksen 4 sijasta 2. Sijoitustoiminto ohittaa arvot ja määrittää seuraavan kronologisen arvon eri merkinnöille. Jos haluat määrittää merkityksellisemmän sijoitusarvon, voit käyttää tiheä_arvo() toiminto.

Dense_rank-funktio ei ohita yhtään sijoitusarvoa järjestyksen aikana funktioittain. Esimerkiksi kolmen ensimmäisen värikohteen (musta) arvo on 1. Seuraavalla värillä (ruskea) ei kuitenkaan ole sijoitusta 4, vaan 2, joka on seuraava kronologinen numero numerointiluettelossa. Dense_rank-funktio on käytännöllisempi ikkunafunktio, koska se antaa merkityksellisen arvon kohteiden luettelolle.

Näin voit käyttää dense_rank-funktiota SQL: ssä:

VALITSEkategoria, väri,
tiheä_arvo()
YLI (järjestys värin mukaan) AS item_rank
FROM sahil.sample;

Ja tässä on esimerkki siitä, miltä tämän toiminnon tulos näyttää:

SQL-funktiot pelastukseen

SQL: n ikkunatoiminnot ovat ihanteellisia edistyneiden analyyttisten toimintojen suorittamiseen. Voit kuitenkin käyttää monia muita SQL-komentoja varmistaaksesi, että laskentataitosi ovat huippuluokkaa. Kun yhdistät ja lasket useita tuloksia kerralla, ei ole mitään parempaa kuin SQL: n alikyselyjen käyttäminen.

Alakyselyt ovat erinomainen työkalu edistyneiden toimintojen suorittamiseen, mikä parantaa tulosten laatua. Tunnin tarpeesta riippuen voit muokata kyselyjäsi ja tehdä niistä tehokkaampia tarpeidesi mukaan.