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 lire

Explorer avec l’IA

Ouvrir dans ChatGPTOuvrir dans ClaudeOuvrir dans Perplexity

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

Manipulation de données en SQL

4 h
328.9K
Débloquez tout le potentiel de vos données grâce à des requêtes SQL avancées et préparez des jeux de données robustes avec PostgreSQL pour la data science.
Afficher les détailsRight Arrow
Commencer Le Cours
Voir plusRight Arrow
Contenus associés

Tutoriel

Python Switch Case Statement : Guide du débutant

Découvrez le match-case de Python : un guide sur sa syntaxe, ses applications en data science, ML, et une analyse comparative avec le switch-case traditionnel.
Matt Crabtree's photo

Matt Crabtree

Tutoriel

Instructions IF, ELIF et ELSE en Python

Dans ce tutoriel, vous apprendrez exclusivement les instructions if else en Python.
Sejal Jaiswal's photo

Sejal Jaiswal

Tutoriel

if…elif…else dans le tutoriel Python

Découvrez comment créer des instructions if…elif…else en Python.
DataCamp Team's photo

DataCamp Team

cursor ai code editor

Tutoriel

Cursor AI : Un guide avec 10 exemples pratiques

Apprenez à installer Cursor AI sur Windows, macOS et Linux, et découvrez comment l'utiliser à travers 10 cas d'utilisation différents.

Tutoriel

Tutoriel Python sur les structures de données

Initiez-vous aux structures de données de Python : apprenez-en plus sur les types de données et les structures de données primitives et non primitives, telles que les chaînes de caractères, les listes, les piles, etc.
Sejal Jaiswal's photo

Sejal Jaiswal

Tutoriel

Tutoriel sur les boucles Python

Tutoriel complet d'introduction aux boucles Python. Apprenez et pratiquez les boucles while et for, les boucles imbriquées, les mots-clés break et continue, la fonction range et bien plus encore.
Satyabrata Pal's photo

Satyabrata Pal

Voir PlusVoir Plus