0Pricing
Coding Interview Prep · Lezione

Espressioni CASE in SELECT

Scrivere logica condizionale inline e distinguere le forme CASE searched e simple

Espressioni CASE in SELECT è una lezione Coding Interview Prep gratuita su CoddyKit. Questa è la lezione 4 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Coding Interview Prep, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Coding Interview Prep include 4 lezioni in totale.

CASE: l'espressione condizionale di SQL

CASE è l'equivalente di if/then/else in SQL, ma è un'espressione che restituisce un valore; per questo funziona ovunque sia possibile usare un valore: SELECT, WHERE, ORDER BY e persino all'interno delle aggregazioni.

SELECT order_id,
       amount,
       CASE WHEN amount > 100 THEN 'large' ELSE 'small' END AS size
FROM orders;

Forma CASE con condizioni

Il CASE con condizioni searched verifica una condizione booleana per ogni WHEN e restituisce il primo risultato corrispondente. È la forma più flessibile e l'ordine è importante: vince la prima condizione vera.

SELECT score,
       CASE
         WHEN score >= 90 THEN 'A'
         WHEN score >= 80 THEN 'B'
         WHEN score >= 70 THEN 'C'
         ELSE 'F'
       END AS grade
FROM exam_results;

Forma CASE semplice

Il CASE simple confronta un'unica espressione con un elenco di valori. È più breve per i confronti di uguaglianza, ma non può gestire intervalli o verifiche su NULL.

SELECT status_code,
       CASE status_code
         WHEN 1 THEN 'active'
         WHEN 2 THEN 'paused'
         WHEN 3 THEN 'closed'
         ELSE 'unknown'
       END AS status_label
FROM accounts;

CASE con condizioni e CASE semplice: quando usare ciascuno

Utilizzi il simple CASE per confrontare l'uguaglianza con valori fissi e il CASE con condizioni per intervalli o NULL. Insidia fondamentale: il simple CASE non può mai trovare una corrispondenza con NULL; utilizzi IS NULL in una forma con condizioni.

-- Simple CASE will NOT catch NULL here
SELECT CASE WHEN bonus IS NULL THEN 'no bonus'
            ELSE 'has bonus'
       END AS bonus_flag
FROM employees;

L'ordine dei rami WHEN è importante

Poiché vince il primo ramo corrispondente, ordini i WHEN dal più specifico al meno specifico. Se inserisce per primo una soglia generica, un punteggio di 95 potrebbe ricevere un'etichetta errata.

-- Correct order: highest threshold first
SELECT CASE
         WHEN score >= 90 THEN 'A'
         WHEN score >= 80 THEN 'B'
         ELSE 'C or below'
       END AS grade
FROM exam_results;

ELSE e il NULL implicito

Se nessuna condizione corrisponde e si omette ELSE, CASE restituisce NULL. Aggiunga un ELSE esplicito per il valore predefinito, così i valori imprevisti non diventano silenziosamente NULL.

-- No ELSE: anything not 1/2 becomes NULL
SELECT CASE flag WHEN 1 THEN 'yes' WHEN 2 THEN 'no' END AS label
FROM toggles;

Aggregazione condizionale (modello pivot)

Il trucco più utile nei colloqui è l'aggregazione condizionale. Inserisca CASE dentro SUM o COUNT per contare le righe di ogni categoria in un'unica passata: un report ordinato in stile pivot.

SELECT
  SUM(CASE WHEN status = 'paid'    THEN 1 ELSE 0 END) AS paid_orders,
  SUM(CASE WHEN status = 'pending' THEN 1 ELSE 0 END) AS pending_orders,
  SUM(CASE WHEN status = 'paid'    THEN amount ELSE 0 END) AS paid_revenue
FROM orders;

COUNT ignora NULL: una scorciatoia con CASE

Poiché COUNT ignora i NULL, può omettere ELSE: le righe che non corrispondono diventano NULL e non vengono conteggiate. È un modo leggermente più breve per eseguire un conteggio condizionale.

SELECT
  COUNT(CASE WHEN status = 'paid' THEN 1 END)    AS paid_orders,
  COUNT(CASE WHEN status = 'pending' THEN 1 END) AS pending_orders
FROM orders;

CASE in ORDER BY per un ordinamento personalizzato

Inserisca CASE in ORDER BY per ordinare in base a una priorità personalizzata invece che in semplice ordine alfabetico o numerico, ad esempio con gli elementi urgenti prima di quelli normali e di tutti gli altri.

SELECT order_id, status
FROM orders
ORDER BY
  CASE status
    WHEN 'urgent' THEN 1
    WHEN 'normal' THEN 2
    ELSE 3
  END,
  order_id;

Coerenza dei tipi tra i rami

Tutti i rami di un CASE devono restituire un tipo compatibile. Mescolare un numero e una stringa può causare un errore o forzare una conversione: scelga un unico tipo di output e utilizzi CAST in modo esplicito, se necessario.

-- Keep branches the same type
SELECT CASE WHEN qty > 0 THEN CAST(qty AS VARCHAR)
            ELSE 'none'
       END AS qty_label
FROM inventory;

CASE in WHERE per il filtraggio condizionale

CASE in WHERE consente di applicare logiche di filtro diverse in base a un flag, ad esempio una soglia di prezzo diversa per ogni regione. Spesso è più chiaro di un intreccio di AND e OR.

SELECT order_id, amount, region
FROM orders
WHERE amount > CASE region
                 WHEN 'US'  THEN 100
                 WHEN 'EU'  THEN 90
                 ELSE 50
               END;

Verifica rapida

Preveda il risultato.

Riepilogo

Riepilogo: CASE restituisce un valore e funziona in SELECT, WHERE, ORDER BY e nelle aggregazioni. La forma con condizioni gestisce intervalli e NULL; vince la prima corrispondenza; nessuna corrispondenza significa NULL; i tipi dei rami devono essere compatibili.

Domande Frequenti

La lezione «Espressioni CASE in SELECT» è gratuita?

Sì — il testo completo di «Espressioni CASE in SELECT» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Coding Interview Prep, passa a CoddyKit PRO. Il corso Coding Interview Prep include 4 lezioni in totale.

Cosa imparerò in «Espressioni CASE in SELECT»?

Scrivere logica condizionale inline e distinguere le forme CASE searched e simple Eserciti Coding Interview Prep con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.

Ho bisogno di esperienza per iniziare Coding Interview Prep?

Non è richiesta alcuna esperienza precedente. Coding Interview Prep su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 4 di 4.

Quanto tempo richiede la lezione «Espressioni CASE in SELECT»?

La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.

Posso scrivere ed eseguire codice in questa lezione Coding Interview Prep?

Sì. Ogni lezione Coding Interview Prep include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.

Tutte le lezioni di questo corso

  1. Proiezione delle colonne e insidie degli alias
  2. Colonne calcolate e precedenza delle espressioni
  3. DISTINCT e GROUP BY per l'unicità
  4. Espressioni CASE in SELECT
← Torna a Coding Interview Prep