22nd Dec 2025 Tempo di lettura: 11 minuti Migliora le tue query: 7 trucchi SQL di livello intermedio che ogni analista dovrebbe conoscere Agnieszka Kozubek-Krycuń analisi dati Indice 1. Utilizza CASE WHEN per le colonne condizionali 2. Combinare CASE WHEN con GROUP BY e SUM 3. Semplificare i riepiloghi con ROLLUP 4. Gestire i dati mancanti con COALESCE e NULLIF 5. Padroneggiare la manipolazione di date e orari 6. Utilizza le funzioni JSON per i dati semi-strutturati 7. Organizzare le query con le espressioni tabellari comuni (CTE) Continua a migliorare le tue superpoteri SQL La padronanza dell'SQL non si limita alla scrittura di semplici query, ma inizia quando si inizia a trasformare i dati in approfondimenti. Impara sette trucchi SQL di livello intermedio che ogni analista dovrebbe conoscere per analizzare in modo più intelligente, lavorare più velocemente e scoprire modelli che le query di base non sono in grado di mostrare. Se conosci già SELECT, JOIN e WHERE, è ora di fare un passo avanti. L'SQL non si esaurisce con SELECT: se vuoi diventare un analista di dati professionista, devi andare oltre le nozioni di base e iniziare a pensare come qualcuno che trasforma i dati in risposte. L'SQL intermedio è dove l'analisi diventa interessante: quando smetti di estrarre dati grezzi e inizi a costruire intuizioni che guidano effettivamente le decisioni aziendali. In questo articolo, esamineremo sette trucchi SQL di livello intermedio che aiuteranno qualsiasi analista di dati a lavorare in modo più intelligente e veloce. Queste tecniche sono competenze pratiche e reali che renderanno le tue query più potenti, efficienti e pronte per analisi avanzate. IlLearnSQL.it nostro corso SQL per l'analisi dei dati ti aiuta a passare dalla scrittura di query di base alla comprensione dei dati a un livello più profondo. Di seguito sono riportati sette trucchi SQL che ogni analista di dati dovrebbe padroneggiare per rendere le proprie query più veloci, pulite e approfondite. 1. Utilizza CASE WHEN per le colonne condizionali Spesso gli analisti devono creare le proprie categorie, ad esempio separando i clienti VIP da quelli normali o etichettando le transazioni come di valore "alto" o "basso". Mentre i filtri mostrano i gruppi esistenti, a volte è necessario definirne di propri. È qui che CASE WHEN può essere d'aiuto. Si tratta di un'espressione SQL standard che funziona come un'istruzione IF, consentendo di costruire una logica condizionale direttamente nelle query per segmentare i dati o applicare regole aziendali in modo dinamico. Esempio: SELECT customer_id, total_spent, CASE WHEN total_spent > 1000 THEN 'VIP' WHEN total_spent BETWEEN 500 AND 1000 THEN 'Regular' ELSE 'New' END AS customer_segment FROM customers; Ecco cosa succede in questa query. Si inizia selezionando l'ID di ciascun cliente e la spesa totale dalla tabella dei clienti. Quindi, l' CASE espressione esegue ogni riga, controllando il valore di total_spent in ordine. Se un cliente ha speso più di 1000, SQL gli assegna l'etichetta 'VIP'. In caso contrario, passa alla condizione successiva: i clienti che hanno speso tra 500 e 1000 vengono etichettati con 'Regular'. Tutti gli altri rientrano nella 'New' categoria definita dalla ELSE . L' CASE espressione si interrompe non appena trova la prima condizione vera, assicurando che ogni cliente ottenga esattamente una categoria. L'output finale include una nuova colonna, customer_segment, che riflette l'etichetta determinata da tali regole. Questo approccio consente di incorporare una semplice logica di business direttamente nel codice SQL, rendendo i report o i dashboard immediatamente più intuitivi senza necessità di pulizia dei dati o classificazione manuale. Per ulteriori informazioni sull' CASE espressione nel nostro articolo SQL CASE WHEN spiegato: 10 semplici esempi per principianti 2. Combinare CASE WHEN con GROUP BY e SUM A volte è necessario creare metriche di riepilogo personalizzate, ad esempio contando il numero di ordini di valore elevato, medio e basso generati da ciascuna regione. Il raggruppamento standard può solo riepilogare le colonne esistenti, ma l'analisi aziendale spesso richiede definizioni personalizzate. È qui che entra in gioco la combinazione di CASE WHEN con GROUP BY e funzioni di aggregazione come SUM o COUNT diventa potente. Consente di calcolare più statistiche basate su condizioni in un'unica query: un modo pulito per trasformare i dati grezzi in informazioni aziendali significative. Esempio: SELECT region, SUM(CASE WHEN total_amount > 1000 THEN 1 ELSE 0 END) AS high_value_orders, SUM(CASE WHEN total_amount BETWEEN 500 AND 1000 THEN 1 ELSE 0 END) AS mid_value_orders, SUM(CASE WHEN total_amount < 500 THEN 1 ELSE 0 END) AS low_value_orders FROM orders GROUP BY region; Questa query raggruppa gli ordini per regione e conta quanti rientrano in diverse categorie di valore. Per ogni ordine, l'espressione CASE espressione controlla il total_amount e restituisce 1 se la condizione è vera o 0 se non lo è. La funzione SUM somma poi i valori per produrre i totali per ciascuna categoria all'interno di una regione. Questo modello è utile per confrontare le prestazioni aziendali, ad esempio individuando quali regioni generano transazioni di valore più elevato o monitorando le differenze nelle dimensioni degli ordini tra i vari mercati. Invece di scrivere più query, è possibile riassumere tutto in un'unica vista utilizzando CASE WHEN con GROUP BY. È possibile imparare a lavorare con CASE, COUNT, SUMe GROUP BY nel nostro corso di livello intermedio Come creare semplici report SQL. 3. Semplificare i riepiloghi con ROLLUP Quando si analizzano dati nel tempo, come le vendite per mese e anno, spesso sono necessari più livelli di aggregazione: totali mensili, totali annuali e un totale complessivo. Di solito, ciò richiederebbe diverse query o istruzioni UNION . ROLLUP risolve questo problema in modo elegante. Estende GROUP BY per includere automaticamente i subtotali e i totali generali, rendendolo ideale per i report finanziari, i dashboard o i riassunti esecutivi. Esempio: SELECT EXTRACT(YEAR FROM order_date) AS year, EXTRACT(MONTH FROM order_date) AS month, SUM(total_amount) AS total_sales FROM orders GROUP BY ROLLUP( EXTRACT(YEAR FROM order_date), EXTRACT(MONTH FROM order_date)) ORDER BY year, month; Risultato: yearmonthtotal_sales 2023185,000 2023290,500 2023NULL175,500 2024192,000 2024295,300 2024NULL187,300 NULLNULL362,800 Qui, ROLLUP(year, month) indica a SQL di raggruppare i dati prima per anno e mese, quindi aggiungere una riga aggiuntiva che riassume ogni anno e infine un'altra riga che mostra il totale generale di tutti gli anni. Ovunque si veda NULL nel risultato, si tratta di un sottototale o di un totale generato automaticamente da ROLLUP. Ciò semplifica la preparazione di riepiloghi basati sul tempo in un'unica query, ad esempio: Rapporti sulle vendite mensili e annuali. Visite al sito web per giorno, mese e totale. Monitoraggio delle spese per reparto con totali a livello aziendale. In breve, ROLLUP è un modo rapido e affidabile per produrre riepiloghi gerarchici direttamente in SQL, senza bisogno di formule di foglio di calcolo o aggregazioni manuali. Puoi scoprire di più su ROLLUP e altre GROUP BY estensioni nel nostro corso di livello Istruzione GROUP BY in SQL ed estensioniintermedio . 4. Gestire i dati mancanti con COALESCE e NULLIF L'esempio ROLLUP mostra un problema comune: le righe dei subtotali utilizzano NULL per rappresentare livelli di raggruppamento mancanti, il che può rendere i risultati più difficili da leggere. Più in generale, NULL i valori nei dati spesso causano confusione: celle vuote nei report, testo mancante nei dashboard o calcoli incompleti negli aggregati. Ogni analista di dati dovrebbe sapere come gestire NULLin modo efficace, perché i valori mancanti non gestiti possono portare a conclusioni errate o a query fallite. Fortunatamente, SQL fornisce strumenti semplici per rendere questi valori più significativi e più facili da utilizzare: COALESCE e NULLIF. Utilizzo di COALESCE: sostituire NULL con valori leggibili COALESCE restituisce il primo valore nonNULL da un elenco, consentendo di sostituire l' NULL etichetta con qualcosa di più significativo. Esempio: SELECT COALESCE(region, 'Total') AS region_label, SUM(total_amount) AS total_sales FROM orders GROUP BY ROLLUP(region); Risultato: regiontotal_sales East85,000 West92,300 Total177,300 Qui, COALESCE(region, 'Total') sostituisce il NULL dalla riga del subtotale con un'etichetta leggibile. È possibile utilizzarlo allo stesso modo per inserire i numeri mancanti (COALESCE(discount, 0)) o valori di testo (COALESCE(name, 'Unknown')). Utilizzo di NULLIF: prevenire gli errori di divisione per zero NULLIF fa l'opposto: converte un valore specifico in NULL. Il suo uso più pratico è quello di prevenire la divisione per zero nei calcoli. Esempio: SELECT product_id, sales, returns, sales / NULLIF(returns, 0) AS sales_to_returns_ratio FROM product_stats; Se restituisce zero, NULLIF(returns, 0) restituisce NULL, impedendo a SQL di generare un errore di divisione per zero. Padroneggiando COALESCE e NULLIF, gli analisti possono rendere le loro query più affidabili e leggibili, assicurandosi che i dati mancanti non ostacolino mai l'accuratezza delle informazioni. 5. Padroneggiare la manipolazione di date e orari Le date sono al centro di quasi tutte le analisi: monitoraggio delle entrate mensili, fidelizzazione settimanale, abbandono trimestrale o crescita annuale. Tuttavia, i timestamp grezzi raramente hanno il formato necessario. Per ottenere informazioni significative, spesso è necessario estrarre parti di una data, calcolare intervalli di tempo o regolare i fusi orari. Un analista di dati dovrebbe sapere come: ordinare i record in ordine cronologico, estrarre parti specifiche di una data o di un'ora (anno, mese, giorno, ora, minuto), aggiungere o sottrarre intervalli di tempo, formattare le date per i report, convertire i fusi orari e gestire le conversioni tra tipi di data e stringa o timestamp. SQL fornisce funzioni per tutte queste operazioni. Esempio: SELECT EXTRACT(YEAR FROM order_date) AS year, EXTRACT(MONTH FROM order_date) AS month, COUNT(order_id) AS orders FROM orders GROUP BY EXTRACT(YEAR FROM order_date), EXTRACT(MONTH FROM order_date) ORDER BY year, month; Questa query raggruppa tutti gli ordini per anno e mese per contare quanti sono stati effettuati in ciascun periodo. EXTRACT estrae parti di una data, in questo caso l'anno e il mese da order_date. La GROUP BY utilizza i valori estratti per aggregare i dati per periodo di tempo, mentre ORDER BY garantisce che i risultati appaiano in ordine cronologico. Una volta compreso come estrarre e manipolare parti di date, è possibile espandere facilmente l'analisi: confrontare la crescita mese su mese, misurare gli intervalli medi tra gli ordini o calcolare le finestre di fidelizzazione. Queste competenze consentono di trasformare i timestamp in informazioni che riflettono i cicli aziendali reali. (Scarica la nostra guida SQL per l'analisi dei dati per vedere queste funzioni in un unico posto). 6. Utilizza le funzioni JSON per i dati semi-strutturati Oggi sempre più dati aziendali provengono da API REST, servizi web che restituiscono informazioni in formato JSON (JavaScript Object Notation). JSON è un modo leggero e semi-strutturato per archiviare dati utilizzando coppie chiave-valore, array e oggetti nidificati. Ad esempio, un'API potrebbe restituire questo: {"user_id": 42, "device": "mobile", "location": {"country": "US", "city": "Boston"}} Questo tipo di dati è flessibile, ma non si adatta perfettamente alle tabelle SQL standard. Una singola colonna potrebbe contenere un intero oggetto JSON, rendendo impossibile l'uso di operatori SQL tradizionali come = o LIKE per estrarre i valori. Ecco perché i database moderni includono funzioni JSON come JSON_EXTRACT() in MySQL o JSON_VALUE() in SQL Server. Esse consentono di interrogare, filtrare e aggregare direttamente i dati semi-strutturati. Esempio: SELECT JSON_EXTRACT(user_data, '$.device') AS device_type, COUNT(*) AS users FROM events GROUP BY device_type; Qui, la colonna user_data memorizza oggetti JSON che descrivono le sessioni degli utenti. La funzione JSON_EXTRACT(user_data, '$.device') recupera il valore della chiave device chiave (come 'mobile' o 'desktop') per ogni riga. La query raggruppa quindi i risultati per tipo di dispositivo e conta quanti utenti appartengono a ciascuna categoria. Essere in grado di lavorare con JSON significa poter analizzare i dati provenienti dai sistemi moderni (risposte API, log delle app o eventi di tracciamento) senza doverli prima rimodellare. Si tratta di una competenza essenziale per gli analisti che hanno a che fare con dati non completamente strutturati ma comunque ricchi di informazioni preziose. 7. Organizzare le query con le espressioni tabellari comuni (CTE) Man mano che le tue competenze SQL crescono, le tue query diventano naturalmente più lunghe: join multipli, filtri e aggregazioni, tutto in un'unica istruzione. Questo è ottimo per l'analisi, ma difficile da leggere e mantenere. Le espressioni tabellari comuni (CTE) rendono le query complesse più chiare e facili da gestire. Ti consentono di definire un set di risultati temporaneo e denominato a cui puoi fare riferimento all'interno della stessa query. Pensa a una CTE come a una sottoquery riutilizzabile con un nome. Le CTE sono particolarmente utili quando: è necessario suddividere un'analisi in più fasi in parti logiche, lo stesso calcolo viene utilizzato più di una volta, oppure si desidera eseguire il debug e testare separatamente sezioni di una query più ampia. Esempio: WITH monthly_sales AS ( SELECT EXTRACT(YEAR FROM order_date) AS year, EXTRACT(MONTH FROM order_date) AS month, SUM(amount) AS total_sales FROM orders GROUP BY EXTRACT(YEAR FROM order_date), EXTRACT(MONTH FROM order_date) ) SELECT year, month, total_sales FROM monthly_sales WHERE total_sales > 50000 ORDER BY year, month; In questo caso, il CTE denominato monthly_sales calcola le vendite totali per mese e anno. Funziona come una tabella temporanea che esiste solo per la durata della query. La query esterna filtra quindi questo risultato per mostrare solo i mesi in cui le vendite hanno superato le 50.000 unità. Questa struttura migliora la leggibilità e rende più facile estendere la query: ad esempio, è possibile eseguire un join monthly_sales con una tabella di obiettivi o calcolare i tassi di crescita senza riscrivere la logica di aggregazione. I CTE sono uno strumento essenziale per gli analisti che scrivono report stratificati basati sui dati o che hanno bisogno di mantenere organizzati e gestibili SQL complessi. Puoi approfondire le tue conoscenze sulle espressioni tabellari comuni nel nostro corso Query ricorsiveavanzato . Continua a migliorare le tue superpoteri SQL Ciascuna di queste tecniche ti aiuta a scrivere query più intelligenti e flessibili, che consentono di risparmiare tempo e impressionare i team. Se sei pronto ad andare oltre le nozioni di base e sviluppare vere e proprie competenze analitiche, esplora SQL per l'analisi dei dati. Il corso copre tutto, dalla reportistica intermedia a quella avanzata, il tutto con esercitazioni pratiche. Vuoi avere accesso completo a tutti i corsi che offriamo? Il pacchetto Completo per sempre SQL ti offre accesso illimitato a tutti i corsi e percorsi attuali e futuri: il miglior rapporto qualità-prezzo e un unico pagamento che ti ripagherà per tutta la tua carriera. Continua ad apprendere, continua a formulare query e continua a migliorare. Tags: analisi dati