
Migliorare le Query Redshift con Espressioni CASE WHEN

Introduzione
Quando si utilizza il data warehouse Redshift di Amazon, potrebbe essere necessario utilizzare la logica condizionale per interrogare e trasformare i dati. L’espressione ‘CASE WHEN’ aiuta a valutare condizioni e restituire risultati diversi a seconda che le condizioni siano vere o false.
In questo articolo, esploreremo le basi dell’uso delle espressioni ‘CASE WHEN’ in Redshift SQL. Tratteremo anche la clausola ELSE durante la nostra discussione. Imparerai la sintassi, vedrai esempi e comprenderai gli usi comuni. Alla fine, sarai attrezzato per sfruttare questa essenziale logica SQL condizionale nelle tue query Redshift.
Sintassi CASE WHEN
La sintassi generale per un’espressione CASE WHEN in Redshift è:
CASE WHEN condition1 THEN result1 WHEN condition2 THEN result2 ... ELSE default_result END
Come funziona:
- La parola chiave CASE segnala l’inizio dell’espressione condizionale
- Si specificano una o più clausole WHEN che contengono ciascuna una condizione da valutare
- Per la prima condizione che risulta vera, viene restituito il risultato THEN corrispondente
- Se nessuna delle condizioni è vera, viene restituito il default_result di ELSE
- La parola chiave END segnala la fine dell’espressione CASE
Guardiamo un semplice esempio per illustrare. Immagina una tabella “users” con colonne per id, nome, ed età. Per categorizzare gli utenti come ‘bambino’, ‘adulto’, o ‘anziano’ in base all’età, potresti usare:
SELECT id, name, CASE WHEN age < 18 THEN 'bambino' WHEN age < 65 THEN 'adulto' ELSE 'anziano' END AS age_category FROM users;
Questo valuterebbe ogni riga, controllando l’età dell'utente, e restituendo la corrispondente age_category.
Creare Dati d'Esempio
Per dimostrare esempi più complessi di CASE WHEN, creiamo prima dei dati di esempio con cui lavorare. Esegui la seguente SQL in Redshift per creare una tabella "orders":
CREATE TABLE orders ( order_id INT, customer_id INT, order_date DATE, total DECIMAL(10,2), status VARCHAR(20) ); INSERT INTO orders VALUES (1, 101, '2023-01-15', 150.00, 'completed'), (2, 102, '2023-02-10', 75.50, 'pending'), (3, 101, '2023-03-01', 200.00, 'completed'), (4, 103, '2023-03-05', 120.00, 'cancelled'), (5, 102, '2023-04-12', 300.00, 'completed');
Questa semplice espressione CASE crea una tabella orders con alcuni record di esempio che ora possiamo utilizzare per eseguire espressioni CASE.
Utilizzare CASE per Derivare Nuove Colonne
Le dichiarazioni CASE possono essere utilizzate per creare nuove colonne in un dataset categorizzando dati esistenti. Quando si organizzano ordini per importo totale, una dichiarazione CASE può impostare le regole per ciascun gruppo.
Ordini inferiori a $100 sono "Basso Valore". La gamma di ordini tra $100 e $500 è "Medio Valore". Ordini superiori a $500 sono "Alto Valore". Puoi facilmente categorizzare i dati in un dataset utilizzando una dichiarazione CASE, che aiuta nell'analisi e nella comprensione.
SELECT order_id, customer_id, total, CASE WHEN total < 100 THEN 'piccolo' WHEN total < 250 THEN 'medio' ELSE 'grande' END AS order_size FROM orders;
Questo restituirebbe:
order_id | customer_id | total | order_size ---------------------------------------------- 1 | 101 | 150.00 | medio 2 | 102 | 75.50 | piccolo 3 | 101 | 200.00 | medio 4 | 103 | 120.00 | medio 5 | 102 | 300.00 | grande
Aggregare con CASE
Le espressioni CASE sono anche molto utili all'interno di funzioni aggregate come SUM() e COUNT(). Ad esempio, per contare il numero di ordini piccoli, medi e grandi:
SELECT COUNT(CASE WHEN total < 100 THEN 1 END) AS small_orders, COUNT(CASE WHEN total >= 100 AND total < 250 THEN 1 END) AS medium_orders, COUNT(CASE WHEN total >= 250 THEN 1 END) AS large_orders FROM orders;
Questo restituirebbe:
small_orders | medium_orders | large_orders -------------------------------------------- 1 | 3 | 1
All'interno di ciascun COUNT(), il CASE restituisce 1 quando la condizione è soddisfatta, che il COUNT() poi somma.
CASE nelle Clausole WHERE e HAVING
È possibile utilizzare anche espressioni CASE nelle clausole WHERE e HAVING per filtrare i risultati in base alla logica condizionale. Ad esempio, per trovare tutti i clienti che hanno effettuato un ordine 'grande':
SELECT DISTINCT customer_id FROM orders WHERE CASE WHEN total >= 250 THEN 'grande' ELSE 'non grande' END = 'grande';
Questo restituirebbe il cliente 102, poiché è l'unico con un ordine 'grande' sopra i $250.
Gestione dei Valori NULL
Le espressioni CASE sono utili anche per gestire i valori NULL. È possibile utilizzare CASE per sostituire i NULL con un valore predefinito o per applicare una logica diversa quando un valore è NULL.
Ad esempio, considera se la nostra tabella "orders" avesse una colonna "shipped_date" che potrebbe essere NULL se l'ordine non fosse ancora stato spedito. Per restituire 'Non Spedito' per questi ordini:
SELECT order_id, status, CASE WHEN shipped_date IS NULL THEN 'Non Spedito' ELSE CAST(shipped_date AS VARCHAR(10)) END AS shipped FROM orders;
Questo controlla se shipped_date IS NULL, e in tal caso restituisce 'Non Spedito'. In caso contrario, converte shipped_date in una stringa per la risposta. Notiamo che utilizzare NVL o COALESCE potrebbe essere una scelta migliore.
Consigli per l'Uso di CASE WHEN
Ecco alcuni consigli da tenere a mente quando si utilizzano le espressioni CASE WHEN in Redshift:
- Le espressioni CASE possono essere annidate l'una dentro l'altra per logiche più complesse
- La clausola ELSE è opzionale e, se omessa, verrà restituito NULL se nessuna condizione corrisponde
- Le espressioni CASE possono essere utilizzate quasi ovunque in una dichiarazione SQL, incluse le clausole SELECT, WHERE, HAVING, GROUP BY e ORDER BY
- Fai attenzione ai tipi di dati - i risultati di un'espressione CASE dovrebbero essere tutti convertibili in un tipo di dato comune
Riepilogo
L'espressione CASE WHEN è uno strumento versatile per applicare la logica condizionale nelle query SQL di Redshift. Puoi usarla per derivare nuove colonne, aggregare dati, filtrare risultati, gestire i NULL e molto altro.
Comprendendo la sintassi e gli usi comuni, sarai in grado di scrivere SQL più potenti ed efficienti per analizzare i tuoi dati in Redshift.
DataSunrise offre strumenti facili da usare e flessibili per la sicurezza del database, l'audit e la conformità che si integrano perfettamente con Amazon Redshift. Visita il sito web di DataSunrise per richiedere una demo online dal nostro team di esperti.
Visita il sito web di DataSunrise per richiedere una demo online dal nostro team di esperti.