Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Impara Tipi di Funzioni Finestra | Alcuni Argomenti Aggiuntivi
Tecniche Avanzate in SQL

bookTipi di Funzioni Finestra

Esploriamo brevemente i principali tipi di funzioni finestra utilizzate in SQL.

Funzioni di aggregazione

Queste sono le classiche funzioni di aggregazione (AVG, SUM, MAX, MIN, COUNT) utilizzate in un contesto finestra. Abbiamo già utilizzato questo tipo di funzione finestra nel capitolo precedente.

Funzioni di ranking

Le funzioni di ranking in SQL sono un tipo di funzione finestra che permette di assegnare un rango a ciascuna riga all'interno di una partizione di un set di risultati. Queste funzioni possono essere estremamente utili per eseguire calcoli e analisi ordinate.

  • RANK(): Assegna un rango univoco a ciascuna riga distinta all'interno della partizione in base alla clausola ORDER BY. Le righe con valori uguali ricevono lo stesso rango, lasciando dei vuoti nella sequenza;

  • DENSE_RANK(): Simile a RANK(), ma senza vuoti nella sequenza di ranking;

  • NTILE(n): Divide le righe in una partizione ordinata in n gruppi e assegna un numero di gruppo a ciascuna riga.

Esempio

Classificheremo le vendite in base all'Amount per ogni ProductID in ordine crescente utilizzando la funzione DENSE_RANK():

12345678
SELECT sales_id, product_id, sales_date, amount, DENSE_RANK() OVER (PARTITION BY product_id ORDER BY amount DESC) AS dense_rank_amount FROM Sales;
copy

La tabella dei risultati contiene tutte le informazioni della tabella principale e una colonna aggiuntiva che fornisce il rango di ciascuna vendita per il prodotto specifico.

Funzioni di confronto dei valori

Le funzioni di confronto dei valori nelle finestre in SQL vengono utilizzate per confrontare i valori nella riga corrente con i valori di altre righe all'interno della stessa partizione.
Queste funzioni sono particolarmente utili per attività che prevedono l'analisi delle tendenze, l'esecuzione di calcoli basati su righe adiacenti o l'accesso a valori specifici di riga all'interno di una finestra definita. Esistono diverse funzioni di confronto dei valori in SQL:

  • LAG() : Recupera il valore da una riga precedente nel set di risultati senza la necessità di un self-join;
  • LEAD(): Recupera il valore da una riga successiva nel set di risultati senza la necessità di un self-join;
  • FIRST_VALUE(): Restituisce il valore della prima riga nella finestra;
  • LAST_VALUE(): Restituisce il valore dell'ultima riga nella finestra.

Esempio

Utilizziamo la funzione di confronto dei valori LAG() per calcolare la variazione dell'importo delle vendite rispetto alla vendita precedente per ciascun prodotto:

1234567891011
SELECT sales_id, product_id, sales_date, amount, LAG(amount, 1) OVER (PARTITION BY product_id ORDER BY sales_date) AS previous_amount, amount - LAG(amount, 1) OVER (PARTITION BY product_id ORDER BY sales_date) AS amount_change FROM Sales ORDER BY product_id, sales_date;
copy

Di conseguenza, è possibile estrarre facilmente informazioni sulle differenze di vendita per ciascun prodotto specifico senza utilizzare sottoquery o stored procedure.
È inoltre possibile calcolare le differenze per tutte le vendite senza partizionamento utilizzando la seguente query:

123456789
SELECT sales_id, product_id, sales_date, amount, LAG(amount, 1) OVER (ORDER BY sales_date) AS previous_amount, amount - LAG(amount, 1) OVER (ORDER BY sales_date) AS amount_change FROM Sales;
copy

Si può notare che non è stata inclusa la clausola PARTITION BY nel blocco OVER. Questo significa che non si vogliono ottenere i valori precedenti solo per un determinato prodotto, ma per tutte le vendite presenti nella tabella.

question mark

Cosa fa la funzione 'NTILE()' in SQL?

Select the correct answer

Tutto è chiaro?

Come possiamo migliorarlo?

Grazie per i tuoi commenti!

Sezione 3. Capitolo 4

Chieda ad AI

expand

Chieda ad AI

ChatGPT

Chieda pure quello che desidera o provi una delle domande suggerite per iniziare la nostra conversazione

Suggested prompts:

Can you explain the difference between RANK() and DENSE_RANK() in more detail?

What are some practical use cases for value comparison window functions like LAG() and LEAD()?

Could you provide more examples of window functions in SQL?

Awesome!

Completion rate improved to 4.35

bookTipi di Funzioni Finestra

Scorri per mostrare il menu

Esploriamo brevemente i principali tipi di funzioni finestra utilizzate in SQL.

Funzioni di aggregazione

Queste sono le classiche funzioni di aggregazione (AVG, SUM, MAX, MIN, COUNT) utilizzate in un contesto finestra. Abbiamo già utilizzato questo tipo di funzione finestra nel capitolo precedente.

Funzioni di ranking

Le funzioni di ranking in SQL sono un tipo di funzione finestra che permette di assegnare un rango a ciascuna riga all'interno di una partizione di un set di risultati. Queste funzioni possono essere estremamente utili per eseguire calcoli e analisi ordinate.

  • RANK(): Assegna un rango univoco a ciascuna riga distinta all'interno della partizione in base alla clausola ORDER BY. Le righe con valori uguali ricevono lo stesso rango, lasciando dei vuoti nella sequenza;

  • DENSE_RANK(): Simile a RANK(), ma senza vuoti nella sequenza di ranking;

  • NTILE(n): Divide le righe in una partizione ordinata in n gruppi e assegna un numero di gruppo a ciascuna riga.

Esempio

Classificheremo le vendite in base all'Amount per ogni ProductID in ordine crescente utilizzando la funzione DENSE_RANK():

12345678
SELECT sales_id, product_id, sales_date, amount, DENSE_RANK() OVER (PARTITION BY product_id ORDER BY amount DESC) AS dense_rank_amount FROM Sales;
copy

La tabella dei risultati contiene tutte le informazioni della tabella principale e una colonna aggiuntiva che fornisce il rango di ciascuna vendita per il prodotto specifico.

Funzioni di confronto dei valori

Le funzioni di confronto dei valori nelle finestre in SQL vengono utilizzate per confrontare i valori nella riga corrente con i valori di altre righe all'interno della stessa partizione.
Queste funzioni sono particolarmente utili per attività che prevedono l'analisi delle tendenze, l'esecuzione di calcoli basati su righe adiacenti o l'accesso a valori specifici di riga all'interno di una finestra definita. Esistono diverse funzioni di confronto dei valori in SQL:

  • LAG() : Recupera il valore da una riga precedente nel set di risultati senza la necessità di un self-join;
  • LEAD(): Recupera il valore da una riga successiva nel set di risultati senza la necessità di un self-join;
  • FIRST_VALUE(): Restituisce il valore della prima riga nella finestra;
  • LAST_VALUE(): Restituisce il valore dell'ultima riga nella finestra.

Esempio

Utilizziamo la funzione di confronto dei valori LAG() per calcolare la variazione dell'importo delle vendite rispetto alla vendita precedente per ciascun prodotto:

1234567891011
SELECT sales_id, product_id, sales_date, amount, LAG(amount, 1) OVER (PARTITION BY product_id ORDER BY sales_date) AS previous_amount, amount - LAG(amount, 1) OVER (PARTITION BY product_id ORDER BY sales_date) AS amount_change FROM Sales ORDER BY product_id, sales_date;
copy

Di conseguenza, è possibile estrarre facilmente informazioni sulle differenze di vendita per ciascun prodotto specifico senza utilizzare sottoquery o stored procedure.
È inoltre possibile calcolare le differenze per tutte le vendite senza partizionamento utilizzando la seguente query:

123456789
SELECT sales_id, product_id, sales_date, amount, LAG(amount, 1) OVER (ORDER BY sales_date) AS previous_amount, amount - LAG(amount, 1) OVER (ORDER BY sales_date) AS amount_change FROM Sales;
copy

Si può notare che non è stata inclusa la clausola PARTITION BY nel blocco OVER. Questo significa che non si vogliono ottenere i valori precedenti solo per un determinato prodotto, ma per tutte le vendite presenti nella tabella.

question mark

Cosa fa la funzione 'NTILE()' in SQL?

Select the correct answer

Tutto è chiaro?

Come possiamo migliorarlo?

Grazie per i tuoi commenti!

Sezione 3. Capitolo 4
some-alt