Vai al contenuto principale

Istruzioni CASE in PostgreSQL

In questo tutorial imparerai a scrivere query condizionali in PostgreSQL usando l'espressione condizionale CASE di PostgreSQL.
Aggiornato 29 set 2026  · 7 min leggi

Scopri con l'IA

ChatGPTClaudePerplexity

Le espressioni condizionali sono tra gli elementi più fondamentali di qualsiasi paradigma di programmazione. Le espressioni condizionali più comuni includono i blocchi if-else e i casi switch. In PostgreSQL puoi formulare espressioni condizionali usando WHEN-THEN case, molto simile ai blocchi if-else. In questo tutorial imparerai come fare.

Prima di iniziare a scrivere query condizionali, è importante configurare un database PostgreSQL locale. Lo farai nella prima sezione di questo tutorial.

Nota: per seguire questo tutorial devi conoscere le basi di SQL e PostgreSQL. Se vuoi ripassare, dai un'occhiata a queste risorse:

Configurare un database PostgreSQL in locale

Per configurare il database, puoi seguire questo articolo. Dopo aver ripristinato correttamente il backup, dovresti vedere queste tabelle nel database:

  • countries
  • route_table
  • station_table
  • train_table

Questo tutorial, però, usa solo la tabella countries. Sentiti libero di esplorare le tabelle incluse nel backup del database. Inoltre, potresti voler creare tuoi database e tabelle. Se hai ripristinato il backup del database, dovresti avere una tabella (popolata con informazioni su diversi paesi in tutto il mondo). Vediamo ora molto brevemente la tabella countries.

Esplorare brevemente la tabella countries

Dopo aver ripristinato il database, puoi visualizzare la tabella nell'interfaccia pgAdmin inclusa nell'installazione predefinita di PostgreSQL. Eseguendo una semplice istruzione SELECT, puoi conoscere le colonne, i relativi tipi di dato e anche le righe contenute nella tabella -

database

La tabella contiene dettagli su un totale di 206 paesi di varie regioni del mondo. Quante regioni esattamente? La query seguente dovrebbe darti la risposta.

SELECT COUNT(DISTINCT(region)) from countries;

Risulta che in questa tabella sono coperte 23 regioni diverse, come Europa occidentale, Polinesia, Medio Oriente e così via. Puoi esplorare la tabella con le tue domande rapide e lungo il percorso potresti scoprire fatti interessanti. Passiamo ora all'anatomia di un CASE di base in PostgreSQL.

Introduzione a PostgreSQL CASE

Di seguito trovi la forma generale di un case PostgreSQL con costrutto WHEN-THEN -

CASE
     WHEN condition_1  THEN result_1
     WHEN condition_2  THEN result_2
     ...
     ELSE  result_n
END

Ecco alcuni punti critici da tenere a mente quando costruisci i CASE in PostgreSQL:

  • Ogni condizione è un'espressione booleana e in base al suo output viene scelto il risultato. Se tutte le espressioni corrispondenti a WHEN risultano False, viene mostrato il risultato della parte ELSE. Se non specifichi la parte ELSE, la query restituirà null.

  • Di solito una condizione si applica a una colonna presente nella tabella su cui stai operando. Costrutti di query condizionali come il precedente si usano tipicamente con le istruzioni SELECT. Tieni presente che la colonna su cui specifichi le espressioni booleane (nel CASE) deve essere presente nell'istruzione SELECT della tua query. Ma quando usi CASE insieme a una clausola where, non è necessario seguire questa regola (ne parleremo più avanti).

  • Il tipo di dato dei risultati deve essere uniforme. Non puoi restituire una string in result_1 e un integer in result_2 e così via.

Passiamo ora ad alcuni esempi.

Scrivere i CASE in PostgreSQL

Partiamo dal semplice. Ora scriverai un CASE per raggruppare i paesi in base all'anno di indipendenza. Gli anni di indipendenza sono registrati nella colonna indep_year. Supponiamo di avere tre gruppi di anni di indipendenza dei paesi da seguire. Creerai tre gruppi di anni di indipendenza per questo -

  • Prima del 1900 (indep_year < 1900)
  • Tra il 1900 e il 1930 (indep_year <= 1930)
  • Dopo il 1930 (indep_year > 1930)

Il risultato finale della query dovrebbe contenere le seguenti colonne -

  • name (del paese)
  • continent (a cui appartiene il paese)
  • indep_year
  • E il gruppo di anni di indipendenza che creerai. Chiamiamolo indep_year_group.

Scriviamo ora la query -

SELECT name, continent, indep_year,
    CASE WHEN indep_year < 1900 THEN 'before 1900'
         WHEN indep_year <= 1930 THEN 'between 1900 and 1930'
         ELSE 'after 1930' END
         AS indep_year_group
FROM countries
ORDER BY indep_year_group;

(La query è ispirata al corso di DataCamp Joining Data in SQL.)

Eseguendo la query, vedrai molti paesi come Palestina, Porto Rico, ecc. per i quali nella tabella non è indicato l'anno di indipendenza. Di conseguenza sono finiti nel gruppo between 1900 and 1930.

I CASE in PostgreSQL possono avere condizioni multiple. Ci sono alcune voci nella tabella in cui il nome del paese e la capitale coincidono. Puoi aggiungere questa condizione al CASE che hai appena costruito -

SELECT name, continent, indep_year,
    CASE WHEN (indep_year < 1900) AND (countries.name = countries.capital) THEN 'before 1900 and capital same'
         WHEN indep_year <= 1930 AND (countries.name = countries.capital) THEN 'between 1900 and 1930 and capital same'
         ELSE 'after 1930_and_no_same_capital' END
         AS indep_year_group
FROM countries
ORDER BY indep_year_group;

Un altro aspetto interessante dei CASE è che puoi abbinarli a funzioni di aggregazione come SUM(). Per implementare un CASE con la funzione di aggregazione SUM(), ti servirà una tabella diversa in cui abbia senso farlo. Creiamo una semplice tabella chiamata student_grades con le seguenti colonne e tipi di dato -

  • student_name (stringa)
  • student_stream (stringa)
  • student_grade (carattere)

La seguente query crea la tabella -

CREATE TABLE student_grades
(student_name character varying,
student_stream character varying,
student_grade character);

Inseriamo ora alcuni record nella tabella. Puoi farlo con alcune istruzioni INSERT. Supponiamo che, dopo gli inserimenti, la tabella student_grades contenga i seguenti record -

table

Ora scriverai un CASE per ottenere la somma degli studenti che appartengono a determinati gruppi di voti. Come puoi vedere, negli esempi della tabella ci sono tre voti distinti: A, B e C. La query condizionale dovrebbe restituire un output simile al seguente -

table

La query per questo è -

SELECT
 SUM (
 CASE
 WHEN student_grade = 'A' THEN
 1
 ELSE
 0
 END
 ) AS "High Scoring",
 SUM (
 CASE
 WHEN student_grade = 'B' THEN
 1
 ELSE
 0
 END
 ) AS "Mid Scoring",
 SUM (
 CASE
 WHEN student_grade = 'C' THEN
 1
 ELSE
 0
 END
 ) AS "Low Scoring"
FROM
 student_grades;

Ecco come puoi abbinare CASE a funzioni di aggregazione per ricavare informazioni interessanti sui dati.

Conclusione e letture consigliate

Questo è tutto per il tutorial. In questo tutorial hai imparato a inserire condizioni in stile if-then nelle tue query SQL per ottenere report interessanti. Hai lavorato su diversi esempi per rafforzare questa abilità. Se cerchi esercizi più impegnativi, dovresti seguire i seguenti corsi DataCamp su SQL -

Scrivimi pure le tue domande su questo tutorial nella sezione Comments.

Argomenti
SQL
Data Science

Corsi SQL

Corso

Manipolazione dei dati in SQL

4 ore
337.2K
Padroneggia query SQL complesse per rispondere a varie domande di Data Science e preparare dataset solidi da analizzare in PostgreSQL.
Vedi i dettagliRight Arrow
Inizia Il Corso
Mostra altroRight Arrow
Correlato

blog

Che cos'è Snowflake? Guida per principianti alla piattaforma dati cloud

Esplora le basi di Snowflake, la piattaforma dati cloud. Scopri la sua architettura, le sue funzionalità e come integrarla nelle tue pipeline di dati.
Tim Lu's photo

Tim Lu

12 min

blog

Tokenizzazione nel NLP: come funziona, sfide e casi d'uso

Guida al preprocessing NLP nel machine learning. Copriamo spaCy, i transformer di Hugging Face e come funziona la tokenizzazione in casi d'uso reali.
Abid Ali Awan's photo

Abid Ali Awan

10 min

blog

I 15 migliori server MCP remoti che ogni AI builder dovrebbe conoscere nel 2026

Scopri i 15 migliori server MCP remoti che stanno trasformando lo sviluppo AI nel 2026. Scopri come migliorano automazione, ragionamento, sicurezza e velocità dei workflow.
Abid Ali Awan's photo

Abid Ali Awan

15 min

Mostra AltroMostra Altro