Lezers zoals jij steunen MUO. Wanneer u een aankoop doet via links op onze site, kunnen we een aangesloten commissie verdienen. Lees verder.

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.

instagram viewer

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.