I lettori come te aiutano a sostenere MUO. Quando effettui un acquisto utilizzando i link sul nostro sito, potremmo guadagnare una commissione di affiliazione. Per saperne di più.

La versatilità di SQL come linguaggio di query DBMS è aumentata nel corso degli anni. La sua ampia utilità e versatilità lo rendono uno dei preferiti di tutti i tempi per ogni analista di dati.

Ci sono parecchie funzioni di livello avanzato oltre a quelle normali di SQL. Queste funzioni sono comunemente note come funzioni di finestra. Se hai a che fare con dati complessi e desideri eseguire calcoli avanzati, puoi utilizzarli per utilizzare al meglio i tuoi dati.

L'importanza delle funzioni della finestra

Diverse funzioni della finestra sono disponibili in SQL e ognuna ti aiuterà a eseguire una serie di calcoli. Dalla creazione di partizioni alla classificazione delle righe o all'assegnazione di numeri di riga, queste funzioni della finestra fanno un po' di tutto.

Le funzioni finestra sono utili quando applichi funzioni di aggregazione su un set di dati specifico o una raccolta di righe. Queste funzioni vanno ben oltre le funzioni di aggregazione fornite da GROUP BY. Tuttavia, la differenza principale è che, a differenza della funzione di raggruppamento, i dati non vengono combinati in un'unica riga.

instagram viewer

Non è possibile utilizzare le funzioni della finestra all'interno del file DOVE, DA, E RAGGRUPPA PER dichiarazioni.

Sintassi di una funzione finestra

Quando si fa riferimento a qualsiasi funzione della finestra, è necessario seguire la struttura della sintassi predefinita, in modo che funzioni correttamente. Se strutturi il comando in modo errato, riceverai un errore e il tuo codice non verrà eseguito.

Ecco la sintassi predefinita:

SELEZIONARE nomecolonna1,
{funzione_finestra}(nomecolonna2)
OVER([PARTIZIONE PER nomecolonna1] [ORDINA PER nomecolonna3]) AS nuova_colonna
FROM nome_tabella;

Dove:

  • nomecolonna1 è il nome della prima colonna che si desidera selezionare.
  • {funzione_finestra} è il nome di una funzione aggregata come sum, avg, count, row_number, rank o dense_rank.
  • nomecolonna2 è il nome della colonna su cui stai applicando la funzione finestra.
  • nomecolonna3 è il nome della terza colonna, che costituirà la base per la partizione.
  • nuova_colonna è un'etichetta per la nuova colonna che puoi applicare utilizzando il COME parola chiave.
  • nome_tabella è il nome della tabella di origine.

Le funzioni della finestra sono diverse da alcune delle la maggior parte dei comandi SQL di base. A differenza delle funzioni di aggregazione in SQL, è possibile utilizzare queste funzioni di finestra per eseguire funzioni avanzate.

Preparazione del set di dati

Puoi usare il CREA TABELLA dichiarazione a creare una nuova tabella in SQL. Ecco un set di dati di esempio che questa guida utilizzerà per definire alcune funzioni della finestra:

Data dell'ordine

Categoria

Colore

Prezzo di vendita

Quantità

08-11-2016

Telefoni

Nero

907.152

6

12-06-2016

Raccoglitori

Verde

18.504

3

11-10-2015

Elettrodomestici

Giallo

114.9

5

11-10-2015

Tabelle

Marrone

1706.184

9

09-06-2014

Telefoni

Rosso

911.424

4

09-06-2014

Carta

Bianco

15.552

3

09-06-2014

Raccoglitori

Nero

407.976

3

09-06-2014

Elettrodomestici

Giallo

68.81

5

09-06-2014

Raccoglitori

Verde

2.544

3

09-06-2014

Magazzinaggio

Arancia

665.88

6

09-06-2014

Magazzinaggio

Arancia

55.5

2

15-04-2017

Telefoni

Nero

213.48

3

05-12-2016

Raccoglitori

Verde

22.72

4

22-11-2015

Elettrodomestici

Verde

60.34

7

22-11-2015

Sedie

Marrone scuro

71.372

2

13-05-2014

Mobilia

Arancia

190.92

5

Spiegazione della funzione somma

Supponiamo di voler calcolare le vendite totali per ogni valore all'interno della colonna categoria. Ecco come puoi farlo:

SELEZIONAREcategoria, colore,
somma (prezzo_vendita)
OVER (ordina per categoria) AS total_sales
FROM sahil.campione;

Nel codice precedente, l'istruzione SQL estrae la categoria e il colore dal set di dati originale. La funzione sum somma la colonna sale_price. Lo fa per categoria, poiché la clausola OVER specifica l'ordinamento in base alla colonna della categoria. Il risultato finale è il seguente:

Come utilizzare la funzione finestra Avg()

Come la funzione somma, puoi calcolare la media per riga di dati con il media funzione. Invece della somma, otterrai una colonna con le vendite medie.

SELEZIONAREcategoria, colore,
medio (prezzo_scontato)
OVER (ordina per categoria) AS avg_sales
FROM sahil.campione;

Impara a usare la funzione della finestra Count()

Simile alle funzioni sum e avg, la funzione count window in SQL è piuttosto semplice e funziona sulla stessa linea delle altre due funzioni. Quando passi la funzione count, ottieni il conteggio totale di ogni valore all'interno della nuova colonna.

Ecco come puoi calcolare il conteggio:

SELEZIONAREcategoria, colore,
contare (categoria)
OVER (ordina per categoria) AS item_count
FROM sahil.campione;

La funzione della finestra Row_Number()

A differenza di alcune delle altre funzioni della finestra sopra elencate, row_number() funziona in modo leggermente diverso. La funzione row_number() assegna un numero di riga a ciascuna riga, a seconda della clausola order by. Il numero di riga iniziale è 1; il row_number assegna un valore corrispondente a ciascuna riga fino alla fine.

Ecco la struttura di base di una funzione row_number():

SELEZIONAREcategoria, colore,
numero_riga()
OVER (ordina per categoria) AS item_number
FROM sahil.campione;

Ma cosa succede se si desidera assegnare numeri di riga separati a ciascun elemento della categoria? La sintassi precedente imposta un numero di serie scorrevole, indipendentemente dagli elementi archiviati all'interno della categoria. Ad esempio, la categoria degli elettrodomestici dovrebbe avere la sua numerazione esclusiva, seguita dai raccoglitori e così via.

Puoi usare il partizione funzione per eseguire questo compito semplice ma pratico. La parola chiave partition assegna numeri di riga designati in base a ciascun elemento di categoria.

SELEZIONAREcategoria, colore,
numero_riga()
OVER (partizione per categoria ordine per categoria) AS item_number
FROM sahil.campione;

Le funzioni Rank() e Dense_Rank()

IL rango() funzione funziona in modo diverso rispetto a numero_riga() funzione. È necessario specificare il nome della colonna all'interno dell'ordine per funzione, per utilizzarlo come base per definire i valori di rango. Ad esempio, nell'esempio di codice seguente è possibile utilizzare la colonna color all'interno della funzione order by. La query utilizzerà quindi tale ordine per assegnare un valore di rango a ciascuna riga.

È possibile utilizzare la sintassi del codice seguente per passare una funzione di rango in SQL:

SELEZIONAREcategoria, colore,
rango()
OVER (ordina per colore) AS item_rank
FROM sahil.campione;

Dai un'occhiata all'output per capire come funziona questa funzione.

La funzione order by ordina la categoria di colore, mentre la funzione rank assegna un rango a ciascun colore. Tuttavia, tutti gli stessi valori di colore hanno lo stesso rango, mentre i diversi colori hanno ranghi separati. Il colore nero ricorre tre volte all'interno del set di dati; invece di assegnare un valore di rango di 1, 2 e 3, gli oggetti di colore nero ottengono un rango di 1.

Tuttavia, il colore successivo, il Marrone, ottiene il rango 4 invece del rango 2. La funzione rank salta i valori e assegna il valore cronologico successivo alle diverse voci. Se vuoi assegnare un valore di rango più significativo, puoi usare il rango_denso() funzione.

La funzione dense_rank non ignora alcun valore di rango durante l'ordinamento per funzione. Ad esempio, i primi tre oggetti di colore (Nero) avranno rango 1. Tuttavia, il colore seguente (Marrone) non avrà un rango 4, ma un rango 2, che è il numero cronologico successivo nell'elenco di numerazione. La funzione dense_rank è una funzione finestra più pratica in quanto assegna un valore significativo all'elenco di elementi.

Ecco come puoi utilizzare la funzione dense_rank in SQL:

SELEZIONAREcategoria, colore,
rango_denso()
OVER (ordina per colore) AS item_rank
FROM sahil.campione;

Ed ecco un esempio di come sarà l'output di questa funzione:

Funzioni SQL in soccorso

Le funzioni della finestra di SQL sono ideali per eseguire operazioni analitiche avanzate. Tuttavia, puoi utilizzare molti altri comandi SQL per assicurarti che le tue abilità computazionali siano di prim'ordine. Quando combini e calcoli più risultati in una volta sola, non c'è niente di meglio che utilizzare le sottoquery di SQL.

Le sottoquery sono un ottimo strumento per eseguire funzioni avanzate, migliorando la qualità dei risultati. A seconda delle necessità del momento, puoi personalizzare le tue query e renderle più efficaci per soddisfare le tue esigenze.