Espressioni CASE e query pivot
Usi CASE WHEN all’interno delle aggregazioni per trasformare tabelle verticali in report a tabella incrociata
Espressioni CASE e query pivot è una lezione SQL Academy gratuita su CoddyKit. Questa è la lezione 3 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 SQL Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso SQL Academy include 4 lezioni in totale.
CASE: If/Else inline per SQL
CASE è il ternario di SQL. Esistono due forme:
-- Searched CASE
CASE WHEN x > 0 THEN 'positive'
WHEN x < 0 THEN 'negative'
ELSE 'zero' END
-- Simple CASE
CASE status
WHEN 'A' THEN 'active'
WHEN 'P' THEN 'pending'
ELSE 'unknown'
ENDCASE in SELECT
Calcoli una colonna derivata:
SELECT id, total,
CASE
WHEN total >= 1000 THEN 'whale'
WHEN total >= 100 THEN 'regular'
ELSE 'small'
END AS bucket
FROM orders;CASE in WHERE e ORDER BY
Filtraggio e ordinamento personalizzati:
-- Custom sort:
ORDER BY
CASE WHEN status = 'urgent' THEN 0 ELSE 1 END,
created_at DESC;
-- Conditional filter:
WHERE CASE WHEN $1 = 'paid' THEN status = 'paid'
ELSE status IN ('pending','paid')
END;CASE negli aggregati: conteggi condizionali
Il classico trucco per creare un pivot:
SELECT user_id,
COUNT(*) AS total,
SUM(CASE WHEN status = 'paid' THEN 1 ELSE 0 END) AS paid,
SUM(CASE WHEN status = 'pending' THEN 1 ELSE 0 END) AS pending,
SUM(CASE WHEN status = 'cancelled' THEN 1 ELSE 0 END) AS cancelled
FROM orders
GROUP BY user_id;FILTER: un'alternativa più chiara
La clausola FILTER di PostgreSQL è più leggibile:
SELECT user_id,
COUNT(*) AS total,
COUNT(*) FILTER (WHERE status = 'paid') AS paid,
COUNT(*) FILTER (WHERE status = 'pending') AS pending,
COUNT(*) FILTER (WHERE status = 'cancelled') AS cancelled
FROM orders
GROUP BY user_id;Creare un pivot dei mesi tra le colonne
Converta il formato long nel formato wide usando CASE + un aggregato:
SELECT year,
SUM(CASE WHEN month = 1 THEN revenue END) AS jan,
SUM(CASE WHEN month = 2 THEN revenue END) AS feb,
-- ...
SUM(CASE WHEN month = 12 THEN revenue END) AS dec
FROM monthly_revenue
GROUP BY year
ORDER BY year;Creare un pivot delle categorie
Una riga per utente, una colonna per stato:
SELECT user_id,
SUM(total) FILTER (WHERE status = 'paid') AS paid_total,
SUM(total) FILTER (WHERE status = 'pending') AS pending_total
FROM orders GROUP BY user_id;Limitazioni dei pivot con CASE
Deve conoscere le colonne di destinazione al momento della scrittura. Per i pivot dinamici, generi SQL nell'applicazione oppure usi PL/pgSQL procedurale.
CASE rispetto a COALESCE / NULLIF
COALESCE = "primo valore non NULL". NULLIF = "NULL se uguale". CASE è più generale: lo usi quando COALESCE/NULLIF non sono adatti.
Compatibilità dei tipi
Tutti i rami di CASE devono restituire tipi compatibili. Esegua un cast esplicito se combina tipi diversi:
SELECT CASE WHEN x THEN 1::TEXT ELSE 'no' END;CASE annidati
Ramificazione su più livelli:
SELECT CASE
WHEN amount IS NULL THEN 'no payment'
WHEN amount = 0 THEN 'free'
WHEN amount < 10 THEN 'cheap'
ELSE
CASE WHEN paid_at IS NULL THEN 'overdue' ELSE 'paid' END
END AS status FROM invoices;Riepilogo
CASE è l'equivalente universale di "if/else" in SQL.
- Colonne calcolate in SELECT
- Pivot tramite CASE negli aggregati o FILTER
- Logica personalizzata in WHERE / ORDER BY
Verifica rapida
Quale clausola è più leggibile per l'aggregazione condizionale in PostgreSQL?
Impara SQL con un tutor IA — gratis
Scrivi ed esegui vero codice nel tuo browser, ricevi aiuto istantaneo da un tutor IA disponibile 24/7, e riprendi da dove hai lasciato sul web o nell'app.
- Corsi
- 46
- Lezioni
- 183
Domande Frequenti
La lezione «Espressioni CASE e query pivot» è gratuita?
Sì — il testo completo di «Espressioni CASE e query pivot» è 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 SQL Academy, passa a CoddyKit PRO. Il corso SQL Academy include 4 lezioni in totale.
Cosa imparerò in «Espressioni CASE e query pivot»?
Usi CASE WHEN all’interno delle aggregazioni per trasformare tabelle verticali in report a tabella incrociata Eserciti SQL Academy 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 SQL Academy?
Non è richiesta alcuna esperienza precedente. SQL Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 3 di 4.
Quanto tempo richiede la lezione «Espressioni CASE e query pivot»?
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 SQL Academy?
Sì. Ogni lezione SQL Academy 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
- UNION, INTERSECT, EXCEPT
- UNION ALL rispetto a UNION (costo della deduplicazione)
- Espressioni CASE e query pivot
- Pattern crosstab (crosstab() di PostgreSQL)