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

Redshift CASE WHEN: Condizioni SQL

Redshift CASE WHEN: Condizioni SQL

Redshift Case When

Introduzione

Quando si usa l’Amazon Redshift data warehouse, 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, approfondiremo le basi dell’utilizzo delle espressioni ‘CASE WHEN’ in Redshift SQL. Durante la discussione, tratteremo anche l’istruzione ELSE. Imparerai la sintassi, vedrai degli esempi e comprenderai i casi d’uso comuni. Alla fine, sarai in grado di sfruttare questa essenziale logica condizionale SQL 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

Ecco come funziona:

  • La parola chiave CASE segna l’inizio dell’espressione condizionale
  • Specifichi 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 dell’ELSE
  • La parola chiave END segnala la fine dell’espressione CASE

Vediamo un semplice esempio per illustrare. Immagina una tabella “users” con le colonne id, name e age. Per categorizzare gli utenti come ‘child’, ‘adult’ o ‘senior’ in base all’età, puoi usare:

SELECT id, name,
CASE
WHEN age < 18 THEN 'child'
WHEN age < 65 THEN 'adult'
ELSE 'senior'
END AS age_category
FROM users;

Questo valuta ogni riga, controlla l’età dell’utente e restituisce la corrispondente age_category.

Creazione di Dati di Esempio

Per dimostrare esempi più complessi di CASE WHEN, creiamo prima dei dati di esempio con cui lavorare. Esegui il 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 di caso crea una tabella ordini con alcuni record di esempio su cui possiamo ora eseguire le espressioni CASE.

Utilizzare CASE per Derivare Nuove Colonne

Le istruzioni CASE possono essere utilizzate per creare nuove colonne in un dataset categorizzando i dati esistenti. Quando si organizzano gli ordini per importo totale, un’istruzione CASE può definire le regole per ogni gruppo.

Ordini inferiori a $100 sono “Low Value”. Una gamma di ordini tra $100 e $500 sono “Medium Value”. Ordini superiori a $500 sono “High Value”. Puoi facilmente categorizzare i dati in un dataset utilizzando una dichiarazione CASE, che aiuta con l’analisi e la comprensione.

SELECT order_id, customer_id, total,
CASE
WHEN total < 100 THEN 'small'
WHEN total < 250 THEN 'medium'
ELSE 'large'
END AS order_size
FROM orders;

Questo restituirebbe:

order_id | customer_id | total  | order_size
----------------------------------------------
1        | 101         | 150.00 | medium
2        | 102         | 75.50  | small
3        | 101         | 200.00 | medium
4        | 103         | 120.00 | medium
5        | 102         | 300.00 | large

Aggregazione 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 piccoli, medi e grandi ordini:

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

Puoi anche usare le 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 ‘large’:

SELECT DISTINCT customer_id
FROM orders
WHERE
CASE
WHEN total >= 250 THEN 'large'
ELSE 'not large'
END = 'large';

Questo restituirebbe il cliente 102, poiché è l’unico con un ordine ‘large’ superiore a $250.

Gestire i Valori NULL

Le espressioni CASE sono anche utili per gestire i valori NULL. Puoi usare il CASE per sostituire i NULL con un valore di default, o per applicare una logica diversa quando un valore è NULL.

Ad esempio, supponiamo che la nostra tabella “orders” avesse una colonna “shipped_date” che potrebbe essere NULL se l’ordine non è ancora stato spedito. Per restituire ‘Not Shipped’ per questi ordini:

SELECT order_id, status,
CASE
WHEN shipped_date IS NULL THEN 'Not Shipped'
ELSE CAST(shipped_date AS VARCHAR(10))
END AS shipped
FROM orders;

Questo controlla se shipped_date IS NULL, e in caso affermativo, restituisce ‘Not Shipped’. Altrimenti, converte shipped_date in una stringa per restituire. Dovremmo notare qui 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 nell’altra per una logica più complessa
  • La clausola ELSE è facoltativa e, se omessa, verrà restituito NULL se nessuna condizione corrisponde
  • Le espressioni CASE possono essere utilizzate quasi ovunque in un’istruzione SQL, comprese le clausole SELECT, WHERE, HAVING, GROUP BY e ORDER BY
  • Fai attenzione ai tipi di dati: i risultati di un’espressione CASE devono essere tutti convertibili in un tipo di dato comune

Riassunto

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 i casi d’uso comuni, sarai in grado di scrivere SQL più potente ed efficiente per analizzare i dati in Redshift.

DataSunrise offre strumenti user-friendly e flessibili per la sicurezza del database, l’audit e la compliance che si integrano perfettamente con Amazon Redshift. Visita il sito di DataSunrise per richiedere una demo online dal nostro team di esperti.

Visita il sito di DataSunrise per richiedere una demo online dal nostro team di esperti.

Successivo

Clausola Snowflake LIMIT

Clausola Snowflake LIMIT

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]