Cititorii ca tine ajută la sprijinirea MUO. Când efectuați o achiziție folosind link-uri de pe site-ul nostru, este posibil să câștigăm un comision de afiliat. Citeşte mai mult.

Versatilitatea SQL ca limbaj de interogare DBMS a crescut de-a lungul anilor. Utilitatea și versatilitatea sa extinsă îl fac favorit din toate timpurile pentru fiecare analist de date.

Există destul de multe funcții la nivel avansat în afară de cele obișnuite ale SQL. Aceste funcții sunt cunoscute în mod obișnuit ca funcții ferestre. Dacă aveți de-a face cu date complexe și doriți să efectuați calcule avansate, le puteți utiliza pentru a utiliza cât mai bine datele dvs.

Importanța funcțiilor ferestrei

Mai multe funcții de fereastră sunt disponibile în SQL și fiecare vă va ajuta să efectuați o serie de calcule. De la crearea de partiții până la clasarea rândurilor sau alocarea numerelor de rând, aceste funcții de fereastră fac un pic de orice.

Funcțiile ferestre sunt benefice atunci când aplicați funcții agregate asupra unui anumit set de date sau a unei colecții de rânduri. Aceste funcții depășesc funcțiile de agregare pe care GROUP BY le furnizează. Cu toate acestea, principala diferență este că, spre deosebire de funcția de grupare, datele dvs. nu sunt combinate într-un singur rând.

instagram viewer

Nu puteți utiliza funcțiile ferestrei din UNDE, DIN, și A SE GRUPA CU declarații.

Sintaxa unei funcții de fereastră

Când vă referiți la orice funcție de fereastră, trebuie să urmați structura de sintaxă implicită, astfel încât să funcționeze corect. Dacă structurați incorect comanda, veți primi o eroare și codul nu va rula.

Iată sintaxa implicită:

SELECTAȚI coloană1,
{window_function}(columnname2)
OVER([PARTITION BY columnname1] [ORDER BY columnname3]) AS noua_coloană
FROM table_name;

Unde:

  • coulmnname1 este primul nume de coloană pe care doriți să-l selectați.
  • {window_function} este numele unei funcții agregate precum sum, avg, count, row_number, rank sau dense_rank.
  • coloană2 este numele coloanei pe care aplicați funcția fereastră.
  • coloană3 este al treilea nume de coloană, care va forma baza pentru partiție.
  • coloană_nouă este o etichetă pentru noua coloană pe care o puteți aplica folosind LA FEL DE cuvânt cheie.
  • nume_tabel este numele tabelului sursă.

Funcțiile ferestrei sunt diferite de unele dintre cele mai de bază comenzi SQL. Spre deosebire de funcțiile agregate din SQL, puteți utiliza aceste funcții de fereastră pentru a efectua funcții avansate.

Pregătirea setului de date

Puteți folosi CREAȚI TABEL declarație către creați un nou tabel în SQL. Iată un exemplu de set de date pe care acest ghid îl va folosi pentru a defini unele funcții ale ferestrei:

Data comandă

Categorie

Culoare

Preț de vânzare

Cantitate

08-11-2016

Telefoane

Negru

907.152

6

12-06-2016

Lianti

Verde

18.504

3

11-10-2015

Aparate

Galben

114.9

5

11-10-2015

Mese

Maro

1706.184

9

09-06-2014

Telefoane

roșu

911.424

4

09-06-2014

Hârtie

alb

15.552

3

09-06-2014

Lianti

Negru

407.976

3

09-06-2014

Aparate

Galben

68.81

5

09-06-2014

Lianti

Verde

2.544

3

09-06-2014

Depozitare

Portocale

665.88

6

09-06-2014

Depozitare

Portocale

55.5

2

15-04-2017

Telefoane

Negru

213.48

3

05-12-2016

Lianti

Verde

22.72

4

22-11-2015

Aparate

Verde

60.34

7

22-11-2015

Scaune

Maro inchis

71.372

2

13-05-2014

Mobila

Portocale

190.92

5

Funcția Sum explicată

Să presupunem că doriți să calculați vânzările totale pentru fiecare valoare din coloana categoriei. Iată cum o poți face:

SELECTAȚIcategorie, culoare,
sumă (preț_reducere)
OVER (comandă după categorie) AS total_sales
FROM sahil.sample;

În codul de mai sus, instrucțiunea SQL extrage categoria și culoarea din setul de date original. Funcția sumă adună coloana preț_preț. O face pe categorii, deoarece clauza OVER specifică ordonarea după coloana categorie. Rezultatul final este următorul:

Cum se utilizează funcția Avg() Window

Ca și funcția sum, puteți calcula media pe rând de date cu ajutorul medie funcţie. În loc de sumă, veți obține o coloană cu vânzările medii.

SELECTAȚIcategorie, culoare,
medie (preț_reducere)
OVER (comandă după categorie) AS avg_sales
FROM sahil.sample;

Învață să folosești funcția ferestrei Count()

Similar cu funcțiile sum și avg, funcția fereastra de numărare din SQL este destul de simplă și funcționează în același mod ca și celelalte două funcții. Când treceți funcția de numărare, obțineți numărul total al fiecărei valori din noua coloană.

Iată cum puteți calcula numărul:

SELECTAȚIcategorie, culoare,
numărare (categorie)
OVER (comandă după categorie) AS item_count
FROM sahil.sample;

Funcția ferestrei Row_Number().

Spre deosebire de unele dintre celelalte funcții ale ferestrei enumerate mai sus, row_number() funcționează ușor diferit. Funcția row_number() atribuie un număr de rând fiecărui rând, în funcție de ordinea după clauză. Numărul rândului de început este 1; row_number atribuie o valoare corespunzătoare fiecărui rând până la sfârșit.

Iată structura de bază a unei funcții row_number():

SELECTAȚIcategorie, culoare,
row_number()
OVER (ordonați după categorie) AS item_number
FROM sahil.sample;

Dar ce se întâmplă dacă doriți să atribuiți numere de rând separate fiecărui element din categorie? Sintaxa de mai sus stabilește un număr de serie rulant, indiferent de elementele stocate în categorie. De exemplu, categoria de aparate ar trebui să aibă numerotarea sa exclusivă, urmată de lianți și așa mai departe.

Puteți folosi compartimentare funcția de a îndeplini această sarcină simplă, dar practică. Cuvântul cheie de partiție atribuie numere de rând desemnate în funcție de fiecare articol de categorie.

SELECTAȚIcategorie, culoare,
row_number()
OVER (partiție după categorie, ordinea categoriei) AS item_number
FROM sahil.sample;

Funcțiile Rank() și Dense_Rank().

The rang() funcția funcționează diferit față de row_number() funcţie. Trebuie să specificați numele coloanei în ordinea după funcție, pentru a-l folosi ca bază pentru a defini valorile rangului. De exemplu, în următorul exemplu de cod, puteți utiliza coloana de culoare din ordinea după funcție. Interogarea va folosi apoi această ordine pentru a atribui o valoare de rang fiecărui rând.

Puteți utiliza sintaxa codului de mai jos pentru a trece o funcție de rang în SQL:

SELECTAȚIcategorie, culoare,
rang()
OVER (comandă după culoare) AS item_rank
FROM sahil.sample;

Aruncă o privire la rezultat pentru a înțelege cum funcționează această funcție.

Ordinea după funcție sortează categoria de culori, în timp ce funcția de rang atribuie un rang fiecărei culori. Cu toate acestea, toate aceleași valori de culoare au același rang, în timp ce culorile diferite au ranguri separate. Culoarea neagră apare de trei ori în setul de date; în loc să atribuie o valoare de rang de 1, 2 și 3, elementele de culoare neagră primesc un rang de 1.

Cu toate acestea, următoarea culoare Maro primește rangul 4 în loc de rangul 2. Funcția de rang omite valori și atribuie următoarea valoare cronologică diferitelor intrări. Dacă doriți să atribuiți o valoare de rang mai semnificativă, puteți utiliza rang_dens() funcţie.

Funcția dense_rank nu omite nicio valoare de rang în timpul ordonării după funcție. De exemplu, primele trei elemente de culoare (Negru) vor avea rangul 1. Cu toate acestea, următoarea culoare (maro) nu va avea un rang 4, ci un rang 2, care este următorul număr cronologic din lista de numerotare. Funcția dense_rank este o funcție de fereastră mai practică, deoarece atribuie o valoare semnificativă listei de articole.

Iată cum puteți utiliza funcția dense_rank în SQL:

SELECTAȚIcategorie, culoare,
rang_dens()
OVER (comandă după culoare) AS item_rank
FROM sahil.sample;

Și iată un exemplu despre cum va arăta rezultatul acestei funcție:

Funcții SQL de salvare

Funcțiile ferestrei SQL sunt ideale pentru efectuarea de operațiuni analitice avansate. Cu toate acestea, puteți folosi o mulțime de alte comenzi SQL pentru a vă asigura că abilitățile dumneavoastră de calcul sunt de top. Când combinați și calculați mai multe rezultate dintr-o singură mișcare, nu este nimic mai bun decât utilizarea subinterogărilor SQL.

Sub-interogările sunt un instrument excelent pentru a efectua funcții avansate, îmbunătățind calitatea rezultatelor. În funcție de necesitatea orei, vă puteți personaliza interogările și le puteți face mai eficiente pentru a se potrivi cerințelor dvs.