De veelzijdigheid van SQL als DBMS-querytaal is in de loop der jaren toegenomen. Het uitgebreide nut en de veelzijdigheid maken het een all-time favoriet voor elke data-analist.
Er zijn nogal wat functies op geavanceerd niveau naast de reguliere functies van SQL. Deze functies zijn algemeen bekend als vensterfuncties. Als u te maken heeft met complexe gegevens en geavanceerde berekeningen wilt uitvoeren, kunt u deze gebruiken om optimaal gebruik te maken van uw gegevens.
Het belang van vensterfuncties
Er zijn verschillende vensterfuncties beschikbaar in SQL, en elk zal u helpen bij het uitvoeren van een reeks berekeningen. Van het maken van partities tot het rangschikken van rijen of het toewijzen van rijnummers, deze vensterfuncties doen een beetje van alles.
Vensterfuncties zijn nuttig wanneer u statistische functies toepast op een specifieke gegevensset of verzameling rijen. Deze functies gaan verder dan de aggregatiefuncties die GROUP BY biedt. Het belangrijkste verschil is echter dat, in tegenstelling tot de groeperingsfunctie, uw gegevens niet in één rij worden gecombineerd.
U kunt geen vensterfuncties gebruiken binnen de WAAR, VAN, En GROEP OP verklaringen.
Syntaxis van een vensterfunctie
Wanneer u naar een vensterfunctie verwijst, moet u de standaard syntaxisstructuur volgen, zodat deze correct functioneert. Als u de opdracht verkeerd structureert, krijgt u een foutmelding en kan uw code niet worden uitgevoerd.
Dit is de standaardsyntaxis:
SELECTEER kolomnaam1,
{window_function}(kolomnaam2)
OVER([PARTITION BY kolomnaam1] [ORDER BY columnname3]) AS nieuwe_kolom
VAN tafelnaam;
Waar:
- kolomnaam1 is de eerste kolomnaam die u wilt selecteren.
- {venster_functie} is de naam van een statistische functie zoals som, gem., aantal, rij_nummer, rang of dichte_rang.
- kolomnaam2 is de naam van de kolom waarop u de vensterfunctie toepast.
- kolomnaam3 is de naam van de derde kolom, die de basis zal vormen voor de partitie.
- nieuwe_kolom is een label voor de nieuwe kolom die u kunt toepassen met behulp van de ALS trefwoord.
- tafel naam is de naam van de brontabel.
Vensterfuncties verschillen van sommige van de meest elementaire SQL-commando's. In tegenstelling tot statistische functies in SQL, kunt u deze vensterfuncties gebruiken om geavanceerde functies uit te voeren.
Voorbereiding van de dataset
U kunt de MAAK TABEL AAN verklaring aan maak een nieuwe tabel in SQL. Hier is een voorbeeld van een gegevensset die in deze handleiding wordt gebruikt om enkele vensterfuncties te definiëren:
Besteldatum |
Categorie |
Kleur |
Verkoopprijs |
Hoeveelheid |
---|---|---|---|---|
08-11-2016 |
Telefoons |
Zwart |
907.152 |
6 |
12-06-2016 |
Bindmiddelen |
Groente |
18.504 |
3 |
11-10-2015 |
Huishoudelijke apparaten |
Geel |
114.9 |
5 |
11-10-2015 |
Tafels |
Bruin |
1706.184 |
9 |
09-06-2014 |
Telefoons |
Rood |
911.424 |
4 |
09-06-2014 |
Papier |
Wit |
15.552 |
3 |
09-06-2014 |
Bindmiddelen |
Zwart |
407.976 |
3 |
09-06-2014 |
Huishoudelijke apparaten |
Geel |
68.81 |
5 |
09-06-2014 |
Bindmiddelen |
Groente |
2.544 |
3 |
09-06-2014 |
Opslag |
Oranje |
665.88 |
6 |
09-06-2014 |
Opslag |
Oranje |
55.5 |
2 |
15-04-2017 |
Telefoons |
Zwart |
213.48 |
3 |
05-12-2016 |
Bindmiddelen |
Groente |
22.72 |
4 |
22-11-2015 |
Huishoudelijke apparaten |
Groente |
60.34 |
7 |
22-11-2015 |
Stoelen |
Donker bruin |
71.372 |
2 |
13-05-2014 |
Meubilair |
Oranje |
190.92 |
5 |
De somfunctie uitgelegd
Stel dat u de totale verkoop wilt berekenen voor elke waarde in de categoriekolom. Hier is hoe je het kunt doen:
SELECTEERcategorie, kleur,
som (uitverkoopprijs)
OVER (volgorde per categorie) AS total_sales
VAN sahil.voorbeeld;
In de bovenstaande code haalt de SQL-instructie de categorie en kleur uit de originele dataset. De somfunctie telt de kolom sale_price op. Het doet dit per categorie, aangezien de OVER-clausule de volgorde specificeert volgens de categoriekolom. Het uiteindelijke resultaat is als volgt:
Hoe de Avg()-vensterfunctie te gebruiken
Net als de somfunctie kunt u met de het gemiddelde per rij gegevens berekenen gem functie. In plaats van de som krijg je een kolom met de gemiddelde verkopen.
SELECTEERcategorie, kleur,
gem. (uitverkoopprijs)
OVER (volgorde per categorie) AS gem_sales
VAN sahil.voorbeeld;
Leer hoe u de vensterfunctie Count() gebruikt
Vergelijkbaar met de som- en avg-functies, is de count-vensterfunctie in SQL vrij eenvoudig en werkt op dezelfde manier als de andere twee functies. Wanneer u de count-functie doorgeeft, krijgt u het totale aantal van elke waarde in de nieuwe kolom.
Zo kunt u het aantal berekenen:
SELECTEERcategorie, kleur,
aantal (categorie)
OVER (volgorde per categorie) AS item_count
VAN sahil.voorbeeld;
De Row_Number()-vensterfunctie
In tegenstelling tot sommige van de andere hierboven genoemde vensterfuncties, werkt row_number() iets anders. De functie row_number() wijst een rijnummer toe aan elke rij, afhankelijk van de order by-clausule. Het startrijnummer is 1; het row_number wijst een corresponderende waarde toe aan elke rij tot het einde.
Hier is de basisstructuur van een row_number() functie:
SELECTEERcategorie, kleur,
rij nummer()
OVER (volgorde per categorie) ALS artikelnummer
VAN sahil.voorbeeld;
Maar wat gebeurt er als u aan elk categorie-item afzonderlijke rijnummers wilt toewijzen? De bovenstaande syntaxis stelt een doorlopend serienummer in, ongeacht de items die in de categorie zijn opgeslagen. De categorie van de apparaten moet bijvoorbeeld zijn exclusieve nummering hebben, gevolgd door mappen, enzovoort.
U kunt de partitie functie om deze eenvoudige, maar praktische taak uit te voeren. Het partitiesleutelwoord wijst toegewezen rijnummers toe op basis van elk categorie-item.
SELECTEERcategorie, kleur,
rij nummer()
OVER (partitie per categorie volgorde per categorie) AS item_number
VAN sahil.voorbeeld;
De functies Rank() en Dense_Rank().
De rang() functie werkt anders dan de rij nummer() functie. U moet de kolomnaam specificeren binnen de functievolgorde om deze als basis te gebruiken om de rangwaarden te definiëren. In het volgende codevoorbeeld kunt u bijvoorbeeld de kleurkolom gebruiken binnen de volgorde per functie. De query gebruikt die volgorde vervolgens om een rangwaarde aan elke rij toe te wijzen.
U kunt de onderstaande codesyntaxis gebruiken om een rangfunctie in SQL door te geven:
SELECTEERcategorie, kleur,
rang()
OVER (volgorde op kleur) AS item_rank
VAN sahil.voorbeeld;
Bekijk de uitvoer om te begrijpen hoe deze functie werkt.
De volgorde op functie sorteert de kleurcategorie, terwijl de rangschikkingsfunctie een rangorde toekent aan elke kleur. Alle dezelfde kleurwaarden hebben echter dezelfde rangorde, terwijl de verschillende kleuren afzonderlijke rangordes hebben. De kleur zwart komt driemaal voor binnen de dataset; in plaats van een rangwaarde van 1, 2 en 3 toe te wijzen, krijgen de zwarte kleuritems een rang van 1.
De volgende kleur Bruin krijgt echter een rang 4 in plaats van rang 2. De rangfunctie slaat waarden over en kent de volgende chronologische waarde toe aan de verschillende ingangen. Als u een betekenisvollere rangwaarde wilt toekennen, kunt u de dichte_rang() functie.
De functie dichtheid_rang slaat geen rangordewaarden over tijdens de volgorde op functie. De eerste drie kleuritems (zwart) hebben bijvoorbeeld rang 1. De volgende kleur (Bruin) heeft echter geen rang 4, maar rang 2, wat het volgende chronologische nummer is in de nummerlijst. De functie dens_rank is een meer praktische vensterfunctie omdat deze een betekenisvolle waarde toekent aan de lijst met items.
Hier ziet u hoe u de functie density_rank in SQL kunt gebruiken:
SELECTEERcategorie, kleur,
dichte_rang()
OVER (volgorde op kleur) AS item_rank
VAN sahil.voorbeeld;
En hier is een voorbeeld van hoe de uitvoer van deze functie eruit zal zien:
SQL-functies om te redden
De vensterfuncties van SQL zijn ideaal voor het uitvoeren van geavanceerde analytische bewerkingen. U kunt echter tal van andere SQL-opdrachten gebruiken om ervoor te zorgen dat uw rekenvaardigheden van topklasse zijn. Wanneer u meerdere resultaten in één keer combineert en berekent, is er niets beter dan de subquery's van SQL te gebruiken.
Subquery's zijn een uitstekend hulpmiddel om geavanceerde functies uit te voeren en de kwaliteit van uw resultaten te verbeteren. Afhankelijk van de behoefte van het uur, kunt u uw vragen aanpassen en effectiever maken om aan uw vereisten te voldoen.