DataSunrise Consegue la Certificazione AWS DevOps Competency per AWS DevSecOps e Monitoraggio, Logging e Performance

Migliorare le Query Redshift con Espressioni CASE WHEN

Migliorare le Query Redshift con Espressioni CASE WHEN

Redshift 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.

Successivo

Clausola LIMIT di Snowflake: Un Utile Strumento di Gestione dei Dati

Clausola LIMIT di Snowflake: Un Utile Strumento di Gestione dei Dati

Scopri di più

Ha bisogno del nostro team di supporto?

I nostri esperti saranno lieti di rispondere alle Sue domande.

Informazioni generali:
[email protected]
Servizio clienti e supporto tecnico:
support.datasunrise.com
Richieste di collaborazione e alleanza:
[email protected]