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