Torna all'elenco degli articoli Articoli
Tempo di lettura: 9 minuti

Funzione SQL LEAD

Imparate a conoscere la funzione SQL LEAD, una funzione importante per chiunque lavori con SQL nell'analisi dei dati. Imparate con esempi come utilizzare questa funzione nella pratica.

La funzione SQL LEAD è una funzione finestra SQL molto importante e utile. Le funzioni finestra SQL sono essenziali per un'analisi efficiente dei dati. Permettono di lavorare con gruppi di righe e singole righe allo stesso tempo. Semplificano la stesura di rapporti complessi. Sono utili per preparare classifiche, confrontare periodi di tempo diversi, calcolare totali di corsa, medie mobili, lunghezza delle serie e molto altro ancora.

Se volete imparare a conoscere le funzioni delle finestre di SQL, date un'occhiata al nostro corsoWindow Functions (Funzioni Finestra) . Include oltre 200 esercizi dettagliati e pratica. È inoltre possibile utilizzare il nostro foglio informativo SQL Window Functions (Funzioni Finestra) per una rapida consultazione.

Che cos'è la funzione SQL LEAD?

La funzione SQL LEAD è una funzione della finestra SQL che consente di accedere ai dati di una riga successiva e di confrontarli con quelli della riga corrente. Questa funzione è particolarmente utile quando è necessario lavorare con sequenze di dati. Ad esempio, se si stanno esaminando i dati sulle vendite, LEAD può mostrare le vendite di domani accanto a quelle di oggi, tutte in un'unica riga. In questo modo è facile vedere subito i cambiamenti o le tendenze.

È possibile utilizzare la funzione LEAD per:

  • Confrontare i dati di vendita da un periodo all'altro.
  • Calcolare la differenza tra i livelli delle scorte da un giorno all'altro.
  • Stimare i valori futuri a fini di budgeting o di previsione.

LEAD Questa funzione è simile a LAG, un'altra funzione finestra di SQL. La differenza principale è che LEAD guarda le righe successive, mentre LAG guarda le righe precedenti. Utilizzate LEAD quando volete vedere cosa succederà dopo e LAG quando dovete rivedere cosa è successo prima. Entrambe sono utili per confrontare i dati con le righe vicine.

Per esempi di utilizzo delle funzioni LEAD e LAG e per un confronto delle loro capacità, consultare la guida La funzione LAG e la funzione LEAD in SQL.

Sintassi di base della funzione SQL LEAD

Il modo più semplice per utilizzare la funzione LEAD è con un solo argomento, che specifica la colonna che si desidera esaminare:

LEAD(column1) OVER (ORDER BY column2)

Ecco una sintesi di questa sintassi:

  • column1: Questa è la colonna da cui si vuole accedere ai dati della riga successiva.
  • OVER: Questa clausola fa parte della sintassi delle funzioni finestra. Deve essere utilizzata con tutte le funzioni finestra. Viene utilizzata per definire la finestra su cui opererà la funzione LEAD.
  • ORDER BY column2: Questa clausola specifica l'ordine di elaborazione delle righe e determina la riga successiva da cui estrarre i dati. La clausola ORDER BY è obbligatoria per LEAD.

Questa sintassi consente di ottenere il valore della colonna specificata (column1) nella riga successiva, in base all'ordinamento (ORDER BY column2) definito. Se non esiste una riga successiva, la funzione restituirà NULL.

Esempio 1: utilizzo di base della funzione SQL LEAD

Vediamo un esempio di base di utilizzo della funzione LEAD. Si supponga di avere una tabella denominata production_schedule con colonne per la data e la quantità di prodotti richiesti:

production_datequantity_required
2024-04-01 150
2024-04-02 180
2024-04-03 200

Se si vuole conoscere la quantità necessaria per il giorno successivo, si utilizza la funzione LEAD in questo modo:</P

SELECT
  production_date,
  quantity_required,
  LEAD(quantity_required) OVER (ORDER BY production_date) AS next_day_quantity
FROM
  production_schedule;

Questa query aggiungerà una colonna che mostra la quantità richiesta per il giorno successivo accanto a quella odierna.

production_date quantity_required next_day_quantity
2024-04-01 150 180
2024-04-02 180 200
2024-04-03 200 null

Nella nostra query OVER(ORDER BY production_date) ordina le righe per data di produzione. La funzione LEAD esamina la riga successiva a quella corrente e ne ricava il valore quantity_required. La riga successiva a 2024-04-01 è quella di 2024-04-02. La quantità richiesta per 2024-04-02 è 180, e questo è ciò che LEAD restituisce. Se non c'è una riga successiva, la funzione LEAD restituisce NULL: non c'è una riga successiva per 2024-04-03, quindi next_day_quantity è NULL.

Esempio di LEAD

Sintassi della funzione LEAD Continua: Parametri opzionali Offset e Default

La sintassi completa della funzione LEAD prevede altri due argomenti opzionali, offset e default. Essi offrono un maggiore controllo sul comportamento di LEAD.

LEAD(column1, offset, default) OVER (... ORDER BY column2)

Ecco una sintesi di questa sintassi:

  • column1: Questa è la colonna da cui si vuole accedere ai dati di una riga successiva.
  • offset: Questo parametro intero opzionale specifica quante righe avanti rispetto alla riga corrente si desidera esaminare. Se si omette questo parametro, il valore predefinito è 1, quindi i dati verranno recuperati dalla riga successiva.
  • default: Questo argomento opzionale fornisce un valore predefinito che la funzione restituirà se l'offset specificato supera i limiti del set di risultati. Se omesso, il valore predefinito è NULL.
  • OVER: Questa parola chiave introduce la specifica della finestra, definendo il modo in cui le righe sono raggruppate e ordinate allo scopo di LEAD.
  • ORDER BY column2: Questa clausola specifica l'ordine di elaborazione delle righe. Determina la riga "successiva" da cui estrarre i dati per ogni riga dell'insieme di risultati della query corrente.

Esempio 2: Offset e argomenti predefiniti

Vediamo un esempio con offset e default. Utilizzando la stessa tabella production_schedule, supponiamo di voler vedere la quantità richiesta non solo per il giorno successivo, ma anche per due giorni prima, e di voler evitare i valori di NULL utilizzando invece 0:

SELECT
  production_date,
  quantity_required,
  LEAD(quantity_required, 2, 0) OVER (ORDER BY production_date) AS two_days_later_quantity
FROM
  production_schedule;
production_date quantity_required two_days_later_quantity
2024-04-01 150 200
2024-04-02 180 0
2024-04-03 200 0

In questo caso, si fornisce 2 come argomento di offset. In questo modo si indica alla funzione LEAD di guardare due righe avanti, invece della riga successiva. Si dà anche 0 come argomento predefinito. In questo modo la funzione LEAD visualizza 0 invece di NULL quando non c'è una riga successiva da cui estrarre i dati.

LEAD - esempio 2

Esempio 3: Funzione LEAD con PARTITION BY

Ovviamente, con la funzione LEAD è possibile utilizzare la sintassi completa delle funzioni finestra. Ad esempio, è possibile combinarla con PARTITION BY. Si supponga che la tabella production_schedule contenga dati relativi a più prodotti. Si vuole fare una previsione separata per ogni prodotto.

production_date product_id quantity_required
2024-04-01101150
2024-04-02101180
2024-04-03101200
2024-04-0110290
2024-04-02102110
2024-04-03102120

È possibile partizionare i dati in OVER(), in questo modo:

SELECT
  production_date,
  product_id,
  quantity_required,
  LEAD(quantity_required) OVER (PARTITION BY product_id ORDER BY production_date) AS next_day_quantity
FROM
  production_schedule;

Questa query fornisce i requisiti di produzione del giorno successivo per ogni prodotto, mantenendo i calcoli separati per ogni product_id.

production_date product_id quantity_required next_day_quantity
2024-04-01 101 150 180
2024-04-02 101 180 200
2024-04-03 101 200 null
2024-04-01 102 90 110
2024-04-02 102 110 120
2024-04-03 102 120 null

Esempi pratici di funzione LEAD

In questa sezione vedremo esempi pratici di utilizzo della funzione LEAD in situazioni reali. La funzione LEAD è particolarmente utile in campi quali l'analisi delle vendite, la gestione delle scorte e la programmazione della produzione.

Esempio pratico 1: Pianificazione degli ordini di farina per la produzione di un panificio

Scenario: Un panificio deve pianificare la quantità di farina da ordinare per la produzione di pane. È importante avere ingredienti a sufficienza senza eccedere nelle scorte. I dati relativi alla produzione di pane pianificata sono memorizzati nella tabella daily_bread_production.

production_date batches_planned
2024-04-01 20
2024-04-02 25
2024-04-03 30

Sappiamo che ogni lotto ha bisogno di 2 kg di farina. Vogliamo conoscere la domanda di farina per oggi e per domani. Ecco la domanda che potremmo utilizzare:

SELECT
  production_date,
  batches_planned * 2 AS flour_needed_today_kg,
  LEAD(batches_planned * 2, 1, 0) OVER (ORDER BY production_date) AS flour_needed_tomorrow_kg
FROM
  daily_bread_production;

La query calcola la quantità di farina necessaria per il giorno corrente e il fabbisogno per il giorno successivo utilizzando la funzione LEAD.

Ecco il risultato della query:

production_date flour_needed_today_kg flour_needed_tomorrow_kg
2024-04-01 40 50
2024-04-02 50 60
2024-04-03 60 null

Naturalmente si tratta di un esempio semplificato, ma è facile immaginare come questo tipo di query possa essere utilizzato in un contesto reale per prevedere le risorse necessarie in base al programma di produzione previsto.

Esempio pratico 2: Differenza tra due righe

Scenario: in un contesto di analisi finanziaria, la funzione LEAD (o LAG) viene utilizzata per calcolare la variazione delle vendite da un giorno all'altro. I dati sulle vendite giornaliere sono memorizzati nella tabella daily_sales.

sales_date total_sales
2024-04-01 100
2024-04-02 110
2024-04-03 90
2024-04-04 150

Questa query calcolerà le vendite del giorno successivo, l'aumento dalle vendite di oggi a quelle del giorno successivo e la percentuale di crescita giorno per giorno:

SELECT
  sales_date,
  total_sales,
  LEAD(total_sales) OVER (ORDER BY sales_date) AS next_day_sales,
  LEAD(total_sales) OVER (ORDER BY sales_date) - total_sales AS increase,
  ROUND(((LEAD(total_sales) OVER (ORDER BY sales_date) - total_sales) / total_sales) * 100, 1) AS percentage_growth
FROM
  daily_sales;

Questa query utilizza LEAD per trovare le vendite del giorno successivo. Utilizza poi LEAD e il valore del giorno corrente per calcolare l'aumento. Infine, utilizza LEAD e le vendite di oggi per calcolare la crescita percentuale giornaliera.

Ecco il risultato:

sales_date total_sales next_day_sales increase percentage_growth
2024-04-01 100 110 10 10.0
2024-04-02 110 90 -20 -18.2
2024-04-03 90 150 60 66.7
2024-04-04 150 null null null

Per ulteriori esempi e per un utilizzo dettagliato delle funzioni finestra, consultate l'articolo Esempio di funzione finestra SQL con spiegazioni, che fornisce una prospettiva più ampia e ulteriori scenari. Questa risorsa può aiutarvi ad approfondire la vostra comprensione e a migliorare la vostra capacità di implementare efficacemente le funzioni finestra SQL.

Conclusioni e ulteriori risorse

Abbiamo esplorato la funzione SQL LEAD, una potente funzione finestra SQL che consente agli analisti di esaminare le righe successive all'interno dei loro set di dati. Abbiamo discusso la sintassi di base della funzione LEAD e ne abbiamo mostrato l'applicazione in vari scenari, come l'andamento delle vendite, la gestione delle scorte e la programmazione della produzione.

Per coloro che si avvicinano per la prima volta alle funzioni di finestra, consiglio il corso Window Functions (Funzioni Finestra) . Si tratta di un programma di formazione interattivo e pratico, progettato per familiarizzare con la sintassi completa e le applicazioni delle funzioni finestra di SQL. Include 218 esercizi pratici che vi aiuteranno a padroneggiare i dettagli delle funzioni finestra di SQL.

Se desiderate esercitarvi con le funzioni SQL window per consolidare la vostra comprensione, il nostro set di esercitazioni Window Functions (Funzioni Finestra) offre 100 esercizi pratici che metteranno alla prova e consolideranno le vostre conoscenze. Inoltre, il nostro articolo SQL Window Functions (Funzioni Finestra) Practice Exercises fornisce una serie di esercizi selezionati dai nostri corsi per testare le vostre abilità nelle funzioni SQL e darvi un'anticipazione dei nostri corsi.