Cours
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.
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
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 CASE
s 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 étantFalse
, le résultat correspondant à la partieELSE
est affiché. Si vous ne spécifiez pas la partieELSE
, 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'instructionSELECT
de votre requête, sur laquelle vous spécifiez les expressions booléennes (dansCASE
). Mais lorsque vous utilisezCASE
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
dansresult_1
et uninteger
dansresult_2
et ainsi de suite.
Prenons maintenant quelques exemples.
Écrire PostgreSQL CASE
s
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 CASE
de 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 CASE
s 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 -
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 -
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
.