2nd Dec 2022 10 minutes de lecture Comment utiliser CASE en SQL Himanshu Kathuria sql apprendre sql CASE Table des matières Qu'est-ce que l'instruction CASE ? Utilisation de CASE dans la clause ORDER BY Utilisation de CASE dans la clause WHERE Utilisation de CASE dans la clause HAVING Utilisation de CASE dans une instruction UPDATE Prêt à utiliser CASE dans les requêtes SQL ? Si vous devez évaluer plusieurs instructions conditionnelles, l'instruction SQL CASE fera l'affaire. Voici ce que vous devez savoir pour utiliser CASE comme un pro. Pourquoi le site CASE est-il si important en SQL ? Si vous analysez ou manipulez des données, vous voudrez souvent définir des règles basées sur certaines conditions, par exemple : si les performances d'un employé sont supérieures à la moyenne, accordez-lui une augmentation de 10 % ; si elles sont exceptionnelles, accordez-lui une augmentation de 15 % ; sinon, accordez-lui une augmentation de 5 %. Pour gérer les situations où vous devez évaluer plusieurs déclarations conditionnelles ensemble et renvoyer des résultats en fonction de la déclaration qui est vraie, SQL propose l'instruction CASE. L'instruction SQL CASE est l'une des constructions conditionnelles les plus utiles qui soient et a de nombreuses applications pour l'analyse des données avec SQL. Si vous souhaitez découvrir les applications pratiques de l'instruction CASE et les différentes façons de l'utiliser, cet article est fait pour vous. Qu'est-ce que l'instruction CASE ? En SQL, l'instruction CASE renvoie des résultats basés sur l'évaluation de certaines conditions. Elle est assez polyvalente et peut être utilisée dans différentes constructions. Par exemple, vous pouvez l'utiliser pour afficher des valeurs, ordonner des résultats de tri ou filtrer des enregistrements. Elle évalue les conditions énoncées et renvoie le résultat de la première instruction qui est évaluée comme vraie. Avant d'entrer dans les détails du fonctionnement de CASE, jetez un coup d'œil à la syntaxe de l'instruction CASE: CASE WHEN <condition> THEN <value>, WHEN <other condition> THEN <value> ELSE <value> END AS <column name> Examinons un exemple pratique d'une simple instruction CASE. Voici la table order_summary tableau : order_idcustomer_idcustomer_namequantityorder_valueshipping_fee A1231221Emily52059 A1243213Javier223000 A1253213Javier12320000 A1263213Javier1016000 Imaginons que vous êtes analyste dans une entreprise de commerce électronique. Vous souhaitez analyser les commandes en fonction de leur valeur et les répartir en plusieurs catégories(très faible, faible, moyenne, élevée et très élevée) en fonction de leur valeur. L'instruction CASE peut vous aider à y parvenir. Voici la requête que vous écrivez : SELECT order_id, CASE WHEN order_value <= 50 THEN 'Very Low' WHEN order_value > 50 AND order_value <= 200 THEN 'Low' WHEN order_value > 200 AND order_value <= 500 THEN 'Medium' WHEN order_value > 500 AND order_value <= 1000 THEN 'High' ELSE 'Very High' END AS order_category FROM order_summary; Et voici les résultats que vous obtiendriez : order_idorder_category A123Medium A124Medium A125Very High A126High Alternativement, vous pouvez également utiliser la requête donnée ci-dessous : SELECT order_id, CASE WHEN order_value <= 50 THEN 'Very Low' WHEN order_value <= 200 THEN 'Low' WHEN order_value <= 500 THEN 'Medium' WHEN order_value <= 1000 THEN 'High' ELSE 'Very High' END AS order_category FROM order_summary; Vous obtiendrez exactement le même résultat, car CASE arrête d'évaluer une valeur dès qu'elle répond aux critères de WHEN. Maintenant, laissez-moi décomposer ces requêtes. Le premier mot-clé est SELECT, qui spécifie les colonnes que vous voulez retourner. Dans notre cas, ces colonnes sont order_id et order_category, que nous avons utilisées comme alias pour l'instruction CASE (CASE...END AS order_category). L'instruction CASE commence par le mot-clé CASE. Il est suivi du mot-clé WHEN, après lequel nous spécifions une condition à évaluer (order_value <= 50). Elle est immédiatement suivie de THEN et de la valeur de retour si la condition est vraie (‘Very Low’). Prenons l'exemple de la première instruction : CASE WHEN order_value <= 50 THEN 'Very Low' Dans cette instruction, lorsque la valeur de la commande est inférieure ou égale à 50 $, la colonne order_category renvoie la valeur "Very Low". En d'autres termes, nous classons toutes les commandes dont la valeur est inférieure ou égale à 50 $ dans la catégorie "Very Low". Si cette condition n'est pas vraie (la valeur est supérieure à 50 $), la requête vérifie si la valeur est supérieure à 200 $. Si elle est inférieure à 200 $ mais supérieure à 50 $, la colonne order_category renvoie la valeur "Low". Si la valeur est supérieure à 200 $, la requête passe à la clause suivante WHEN, et ainsi de suite. Si aucune des conditions n'est vraie, la valeur spécifiée dans ELSE est renvoyée. Ainsi, l'instruction CASE ajoute de la logique à votre instruction SELECT. Si vous êtes novice en SQL et que vous souhaitez comprendre comment écrire ce type de requêtes, je vous recommande la pisteLe SQL de A à Z de LearnSQL.fr. Elle commence par les bases de SQL et des bases de données, puis vous guide jusqu'aux requêtes et fonctions plus sophistiquées. C'est un excellent moyen de commencer votre voyage en SQL. Si vous analysez un grand nombre de commandes, l'agrégation peut s'avérer utile pour des requêtes comme celles-ci. L'agrégation consiste à regrouper des enregistrements similaires, puis à utiliser une métrique basée sur les valeurs groupées pour comprendre les caractéristiques de ce groupe. En SQL, la clause GROUP BY est votre entrée dans le monde des statistiques agrégées. (Pour une compréhension plus détaillée de GROUP BY, consultez cet article). Pour l'instant, nous allons simplement voir comment GROUP BY et CASE fonctionnent ensemble. Voici une version mise à jour de notre requête précédente : SELECT CASE WHEN order_value <= 50 THEN 'Very Low' WHEN order_value > 50 AND order_value <= 200 THEN 'Low' WHEN order_value > 200 AND order_value <= 500 THEN 'Medium' WHEN order_value > 500 AND order_value <= 1000 THEN 'High' ELSE 'Very High' END AS order_category, COUNT(order_id) FROM order_summary GROUP BY 1; Et le nouveau résultat : order_categoryCOUNT(order_id) High1 Medium2 Very High1 Ici, nous utilisons COUNT comme fonction d'agrégation. Voici comment cela fonctionne. La clause GROUP BY agrège tous les enregistrements en fonction des valeurs renvoyées dans la première colonne de SELECT. Dans notre cas, il s'agit de order_category. Ensuite, pour chaque valeur différente de order_category, COUNT(order_id) calculera le nombre total de commandes appartenant à la catégorie correspondante. L'instruction CASE permet de décider de la catégorie à attribuer à chaque commande. Dans nos données, nous avons un total de 1 commande dans la catégorie "Haute" (order_value entre 500 et 1000), 2 commandes dans la catégorie "Moyenne" (order_value entre 200 et 500) et 1 commande dans la catégorie "Très haute" (order_value supérieure à 1000). Dans tous les exemples ci-dessus, la clause CASE a été utilisée dans la partie SELECT de la requête. Cependant, cette clause est assez polyvalente et peut être utilisée pour renvoyer des résultats basés sur des conditions dans d'autres parties de la requête. Maintenant que vous avez une idée de ce qu' est l 'instruction CASE, voyons d'autres façons de l'utiliser. Utilisation de CASE dans la clause ORDER BY La clause ORDER BY est utilisée pour trier les résultats d'une requête dans un ordre donné. Par exemple, vous pourriez vouloir trier le nombre de commandes passées par chaque client sur la base de customer_name. Voici la requête que vous écrivez : SELECT customer_name, COUNT(order_id) FROM order_summary GROUP BY customer_name ORDER BY customer_name; Et la sortie est : customer_nameCOUNT(order_id) Emily1 Javier3 Ici, la requête trie les résultats dans l'ordre alphabétique croissant (parce que vous triez par une valeur texte). Sauf indication contraire de votre part, ORDER BY utilisera toujours l'ordre ascendant (c'est-à-dire A-Z, 1-10). Vous pouvez placer le mot clé DESC après la clause de nom de colonne pour trier les résultats dans l'ordre décroissant (Z-A, 10-1) : ORDER BY customer_name DESC. Supposons que vous souhaitiez trier les enregistrements par order_id dans l'ordre croissant. Cependant, vous souhaitez afficher d'abord les commandes de plus de 120 éléments. En d'autres termes, vous allez d'abord trier par quantité d'articles (lorsque la quantité est supérieure à 120), puis par ID de commande. Cela nécessite une évaluation conditionnelle dans la clause ORDER BY: Query: SELECT customer_name, order_id, order_value, quantity FROM order_summary ORDER BY CASE WHEN quantity > 120 THEN quantity END, order_id; Voici le résultat : customer_nameorder_idorder_valuequantity JavierA1252000123 EmilyA1232055 JavierA12430022 JavierA126600101 Dans cette requête, nous obtenons d'abord les colonnes customer_name, order_id, order_value et quantité de la table. En classant les lignes, cette requête obtient d'abord les lignes où la quantité est supérieure à 120. (Dans ce cas, la quantité est 123.) Comme aucune autre ligne ne répond à ce critère, le reste des lignes est classé par order_id. Utilisation de CASE dans la clause WHERE La clause WHERE est utilisée pour filtrer les enregistrements des résultats de la requête en fonction de conditions déclarées. Par exemple, si votre entreprise souhaite renoncer aux frais d'expédition pour les commandes supérieures à 100 $, vous voudrez peut-être d'abord voir combien de commandes rempliront les conditions requises et analyser l'impact. La clause suivante WHERE ne comptera que les ID des commandes supérieures à 100 $ : SELECT COUNT(order_id) FROM order_summary WHERE order_value > 100; Et le résultat : COUNT(order_id) 4 Sur la base du résultat, vous supposerez qu'environ 4 commandes seront impactées par cette mesure. Bien entendu, il s'agit de la première étape de votre analyse ; vous souhaiterez probablement effectuer des analyses beaucoup plus détaillées pour quantifier l'impact. Laissez-moi maintenant vous montrer un exemple d'utilisation de la clause WHERE avec CASE. Jetez un coup d'œil à la influencer_list tableau : influencer_nameinfluencer_channelyoutube_channelfb_channelmonth_yeartotal_views LouisyoutubehungryLouisJan_20213200 JanetfacebookstylenmakeupJan_2021423444 MichaelfacebookInfl_brandXJan_20212322 MichaelfacebookInfl_brandXFeb_2021240000 Supposons que votre entreprise utilise divers influenceurs pour promouvoir vos marques. Vous voulez voir tous les influenceurs dont la chaîne YouTube ou le compte Facebook utilise directement votre nom ("BrandX"). Chaque influenceur possède un type de chaîne/compte. Voici comment vous trouverez ceux qui mentionnent BrandX : SELECT DISTINCT influencer_name FROM influencer_list WHERE CASE WHEN influencer_channel = 'facebook' THEN fb_channel WHEN influencer_channel = 'youtube' THEN youtube_channel END LIKE '%brandX%'; Voici le résultat : influencer_name Michael La requête ci-dessus renvoie toutes les lignes où youtube_channel ou fb_channel contient ‘brandX’. Comment pouvons-nous faire cela ? Eh bien, vous savez comment WHERE et CASE WHEN fonctionnent ensemble. Le nouvel élément ici est LIKE '%brandX%'. Il indique à la requête de renvoyer les canaux d'influence dont le nom contient "BrandX" ; LIKE est utilisé pour faire correspondre la valeur de la colonne au modèle, et le signe pourcentage (%) indique que n'importe quel nombre de caractères peut précéder ou suivre "BrandX" (c'est pourquoi le % se trouve aux deux extrémités de BrandX). Utilisation de CASE dans la clause HAVING La clause HAVING est utilisée avec la clause GROUP BY pour filtrer les groupes affichés. Par exemple, si vous souhaitez afficher les enregistrements de la table influencer_list pour lesquels total_views est supérieur à un million pendant la durée de vie de l'influenceur, vous écrivez : SELECT influencer_name, SUM(total_views) FROM influencer_list GROUP BY influencer_name HAVING SUM(total_views) > 200000; Et voici ce que vous obtenez : influencer_nameSUM(total_views) Michael242322 Janet423444 Vous pouvez également utiliser CASE avec la clause HAVING. Supposons que vous vouliez obtenir une liste d'influenceurs dont le nombre total de vues est supérieur à 100 pour YouTube ou supérieur à 400 000 pour Facebook. SELECT influencer_name, influencer_channel, SUM(total_views) FROM influencer_list GROUP BY influencer_name, influencer_channel HAVING CASE WHEN influencer_channel = 'youtube' THEN SUM(total_views) > 100 WHEN influencer_channel = 'facebook' THEN SUM(total_views) > 400000 END; Et le résultat : influencer_nameinfluencer_channelSUM(total_views) Louisyoutube3200 Janetfacebook423444 Cette requête additionne d'abord le nombre total de vues par influencer_name et influencer_channel. Dans la clause HAVING, nous filtrons ensuite uniquement les groupes qui ont plus de 100 vues pour YouTube et plus de 400 000 vues pour Facebook. Remarquez que Michael, qui a 242 322 vues sur Facebook, n'apparaît pas dans le résultat ; son total est inférieur à 400 000. Utilisation de CASE dans une instruction UPDATE Vous pouvez également utiliser CASE dans une instruction UPDATE. L'instruction SQL UPDATE est utilisée pour modifier les valeurs d'une table existante. Imaginons que vous souhaitiez mettre à jour les valeurs de influencer_channel dans notre ensemble de données actuel en remplaçant les chaînes par un code à deux lettres : "youtube" doit être remplacé par "yt" et "facebook" par "fb". UPDATE influencer_list SET influencer_channel = CASE influencer_channel WHEN 'youtube' THEN 'yt' WHEN 'facebook' THEN 'fb' ELSE 'invalid value' END; Voici comment la table influencer_list après la mise à jour : influencer_nameinfluencer_channelyoutube_channelfb_channelmonth_yeartotal_views LouisythungryLouisJan_20213200 JanetfbstylenmakeupJan_2021423444 MichaelfbInfl_brandXJan_20212322 MichaelfbInfl_brandXFeb_2021240000 Vous remarquerez que "youtube" a été remplacé par "yt" et que "facebook" a été remplacé par "fb" dans la colonne "influencer_channel". Vous pouvez également utiliser CASE pour supprimer ou insérer des lignes dans vos tableaux. Pour plus de détails, lisez cet article sur l'utilisation de CASE avec des instructions modifiant les données. Prêt à utiliser CASE dans les requêtes SQL ? Après tous ces exemples, je suis sûr que vous avez une meilleure idée du fonctionnement de CASE dans SQL et des diverses applications potentielles de l'instruction. Il est donc temps de mettre votre apprentissage en pratique ! La lecture de SQL vous aidera sûrement à apprendre, mais si vous voulez devenir un expert, votre mantra est "Pratiquez ! Je vous recommande également un bon cours pratique de SQL. Le cours pratique LearnSQL.fr utilise des exemples pratiques et des cas d'utilisation, et vous n'avez pas besoin d'installer quoi que ce soit pour commencer - l'Internet et un navigateur suffisent. Plus vous écrirez de requêtes, plus vous maîtriserez CASE et les autres commandes SQL. Pourquoi attendre ? Commencez dès maintenant ! Tags: sql apprendre sql CASE