Accéder au contenu principal

Les instructions CASE dans PostgreSQL

Dans ce tutoriel, vous apprendrez à écrire des requêtes conditionnelles dans PostgreSQL en utilisant l'expression conditionnelle CASE de PostgreSQL.
Actualisé 16 janv. 2025  · 7 min de lecture

Les expressions conditionnelles sont l'un des éléments les plus fondamentaux de tout paradigme de programmation. Les expressions conditionnelles courantes comprennent les blocs if-else et les cas switch. Vous pouvez formuler des expressions conditionnelles dans PostgreSQL en utilisant WHEN-THEN case qui est très similaire aux blocs if-else. Dans ce tutoriel, vous apprendrez comment procéder.

Avant de commencer à écrire des requêtes de conditions, il est important que vous configuriez une base de données PostgreSQL locale. Vous le ferez dans la première section de ce tutoriel.

Note: Pour pouvoir suivre ce tutoriel, vous devez connaître les bases de SQL et de PostgreSQL. N'hésitez pas à rafraîchir les connaissances de base à l'aide des ressources suivantes :

Mise en place d'une base de données PostgreSQL en local

Vous pouvez utiliser ce fichier de sauvegarde et le restaurer dans votre serveur PostgreSQL. Si vous voulez savoir comment faire, vous pouvez suivre cet article. Après avoir restauré avec succès la sauvegarde, vous devriez pouvoir voir ces tableaux dans la base de données -

  • pays
  • route_table
  • station_table
  • train_table

Ce tutoriel n'utilise cependant que le tableau countries. N'hésitez pas à explorer les tableaux fournis dans la sauvegarde de la base de données. Vous pouvez également créer vos propres bases de données et tableaux. Si vous avez restauré la sauvegarde de la base de données, vous devriez déjà disposer d'un tableau (contenant les informations sur les différents pays du monde). Explorons maintenant très brièvement le tableau countries.

Exploration de la countries tableau très brièvement

Après avoir restauré la base de données, vous pouvez visualiser le tableau dans l'interface pgAdmin qui est fournie avec l'installation par défaut de PostgreSQL. En exécutant une simple instruction SELECT, vous obtenez des informations sur les colonnes, leurs types de données et les tableaux qu'elles contiennent.

base de données

Le tableau contient des informations sur un total de 206 pays différents, issus de diverses régions du monde. Combien de régions exactement ? La requête ci-dessous devrait vous donner la réponse à la question.

SELECT COUNT(DISTINCT(region)) from countries;

Il s'avère que 23 régions différentes sont couvertes par ce tableau, telles que l'Europe occidentale, la Polynésie, le Moyen-Orient, etc. Vous pouvez explorer le tableau en posant vos propres questions rapides et, en cours de route, vous découvrirez peut-être des faits intéressants. Voyons maintenant l'anatomie d'une version de base de PostgreSQL CASE.

Devenez ingénieur en données

Devenez un ingénieur de données grâce à l'apprentissage avancé de Python
Commencez à apprendre gratuitement

Introduction à PostgreSQL CASE

Ce qui suit décrit la forme générale d'un cas PostgreSQL avec WHEN-THEN construct -

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

Voici quelques points critiques que vous devez garder à l'esprit lors de la construction de CASEs dans PostgreSQL :

  • Chaque condition est une expression booléenne et le résultat est choisi en fonction de sa sortie. Si toutes les expressions correspondant à WHEN sont évaluées comme étant False, le résultat correspondant à la partie ELSE est affiché. Si vous ne spécifiez pas la partie ELSE, la requête renverra null.

  • Une condition est généralement appliquée sur une colonne présente dans le tableau sur lequel vous opérez. Les constructions de requêtes conditionnelles telles que celles décrites ci-dessus sont généralement réalisées à l'aide des instructions SELECT. Gardez à l'esprit que la colonne doit être présente dans l'instruction SELECT de votre requête, sur laquelle vous spécifiez les expressions booléennes (dans CASE). Mais lorsque vous utilisez CASE en association avec une clause where, vous n'avez pas besoin de suivre cette règle (nous y reviendrons plus tard).

  • Le type de données des résultats doit être uniforme. Vous ne pouvez pas renvoyer un string dans result_1 et un integer dans result_2 et ainsi de suite.

Prenons maintenant quelques exemples.

Écrire PostgreSQL CASEs

Commençons par le plus simple. Vous allez maintenant écrire un CASE pour regrouper les pays en fonction de l'année d'indépendance. Les années d'indépendance sont enregistrées dans la colonne indep_year. Supposons que vous ayez trois groupes d'années d'indépendance des pays que vous devez suivre. Vous allez créer trois groupes d'années d'indépendance pour cela -

  • Avant 1900 (indep_year < 1900)
  • Entre 1900 et 1930 (indep_year <= 1930)
  • After 1930 (indep_year > 1930)

Le résultat final de la requête doit contenir les colonnes suivantes -

  • nom (du pays)
  • continent (auquel le pays appartient)
  • indep_year
  • Et le groupe des années d'indépendance que vous allez créer. Appelons-le indep_year_group.

Écrivons maintenant la requête -

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 requête est inspirée du cours Joining Data in SQL de DataCamp).

En exécutant la requête, vous verrez de nombreux pays comme la Palestine, Porto Rico, etc. pour lesquels aucune année d'indépendance n'est fournie dans le tableau. C'est ainsi qu'ils ont obtenu le groupe between 1900 and 1930.

Les sites CASEde PostgreSQL peuvent avoir plusieurs conditions. Il y a quelques entrées dans le tableau où le nom du pays et celui de la capitale sont identiques. Vous pouvez l'ajouter à votre site déjà construit CASE -

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 autre aspect intéressant de CASEs est que vous pouvez les associer à des fonctions d'agrégation telles que SUM(). Pour mettre en œuvre une CASE avec la fonction agrégée SUM(), vous aurez besoin d'un tableau différent où cela pourrait être une bonne idée. Créons un tableau simple nommé student_grades dont les colonnes et les types de données sont les suivants -

  • student_name (string)
  • student_stream (chaîne)
  • student_grade (caractère)

La requête suivante crée le tableau pour vous -

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

Insérons maintenant quelques enregistrements dans le tableau. Vous pouvez le faire à l'aide de quelques déclarations INSERT. Supposons qu'après les insertions, le tableau student_grades contienne maintenant les enregistrements suivants -

tableau

Vous allez maintenant écrire une page CASE pour obtenir la somme des élèves qui appartiennent à certains groupes de niveau. Comme vous pouvez le constater, selon les instances du tableau, il y a trois grades distincts - A, B et C. La requête conditionnelle devrait renvoyer un résultat similaire à celui qui suit -

tableau

La requête pour cette -

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;

C'est ainsi que vous pouvez associer CASE à des fonctions d'agrégation pour obtenir des informations intéressantes sur les données.

Conclusion et lectures complémentaires

C'est tout pour ce tutoriel. Dans ce tutoriel, vous avez appris comment incorporer if-then comme le conditionnement dans vos requêtes SQL pour obtenir des rapports intéressants. Vous avez travaillé sur plusieurs exemples pour renforcer cette compétence. Si vous êtes à la recherche d'exercices plus difficiles, vous devriez suivre les cours DataCamp suivants sur SQL -

N'hésitez pas à me faire part de vos questions sur ce tutoriel via la section Comments.

Devenez certifié SQL

Prouvez que vos compétences en SQL sont prêtes à l'emploi grâce à une certification.
Sujets

Cours SQL

cours

Introduction to SQL

2 hr
976K
Learn how to create and query relational databases using SQL in just two hours.
Afficher les détailsRight Arrow
Commencer le cours
Voir plusRight Arrow
Apparenté

blog

Les 20 meilleures questions d'entretien pour les flocons de neige, à tous les niveaux

Vous êtes actuellement à la recherche d'un emploi qui utilise Snowflake ? Préparez-vous à répondre à ces 20 questions d'entretien sur le flocon de neige pour décrocher le poste !
Nisha Arya Ahmed's photo

Nisha Arya Ahmed

20 min

blog

Les 32 meilleures questions d'entretien sur AWS et leurs réponses pour 2024

Un guide complet pour explorer les questions d'entretien AWS de base, intermédiaires et avancées, ainsi que des questions basées sur des situations réelles. Il couvre tous les domaines, garantissant ainsi une stratégie de préparation bien équilibrée.
Zoumana Keita 's photo

Zoumana Keita

30 min

blog

Q2 2023 DataCamp Donates Digest

DataCamp Donates a offert plus de 20k bourses d'études à nos partenaires à but non lucratif au deuxième trimestre 2023. Découvrez comment des apprenants défavorisés et assidus ont transformé ces opportunités en réussites professionnelles qui ont changé leur vie.
Nathaniel Taylor-Leach's photo

Nathaniel Taylor-Leach

blog

2022-2023 Rapport annuel DataCamp Classrooms

À l'aube de la nouvelle année scolaire, DataCamp Classrooms est plus motivé que jamais pour démocratiser l'apprentissage des données, avec plus de 7 650 nouveaux Classrooms ajoutés au cours des 12 derniers mois.
Nathaniel Taylor-Leach's photo

Nathaniel Taylor-Leach

8 min

blog

Célébration de Saghar Hazinyar : Une boursière de DataCamp Donates et une diplômée de Code to Inspire

Découvrez le parcours inspirant de Saghar Hazinyar, diplômée de Code to Inspire, qui a surmonté les défis en Afghanistan et s'est épanouie grâce à une bourse de DataCamp Donates.
Fereshteh Forough's photo

Fereshteh Forough

4 min

blog

Nous avons fait don de bourses DataCamp Premium à un million de personnes, et ce n'est pas fini.

Réparties entre nos deux programmes d'impact social, DataCamp Classrooms et #DCDonates, les bourses offrent un accès illimité à tout ce que DataCamp Premium a à offrir.
Nathaniel Taylor-Leach's photo

Nathaniel Taylor-Leach

Voir plusVoir plus