En combinant la fonction COUNT de SQL avec des instructions CASE, vous pouvez compter efficacement les données en fonction de conditions spécifiques. Cela permet une agrégation plus flexible que le simple comptage. Dans cet article, nous comprendrons les bases de la fonction COUNT et des instructions CASE, et apprendrons comment les utiliser à travers des exemples spécifiques de requêtes SQL.
Bases de la Fonction COUNT
La fonction COUNT est utilisée en SQL pour compter le nombre de lignes dans une base de données. Vous pouvez l’utiliser pour obtenir le nombre total de lignes ou le nombre de lignes où une colonne spécifique a une valeur.
Compter Toutes les Lignes
Pour compter toutes les lignes dans une table, utilisez COUNT(*) comme suit :
SELECT COUNT(*) FROM table_name;
Compter les Valeurs dans une Colonne Spécifique
Pour compter les lignes où une colonne spécifique a une valeur, utilisez COUNT(column_name). Les valeurs NULL ne sont pas comptées.
SELECT COUNT(column_name) FROM table_name;
Bases de l’Instruction CASE
L’instruction CASE est une expression conditionnelle utilisée en SQL pour renvoyer différentes valeurs en fonction des conditions spécifiées. Elle a une syntaxe similaire aux instructions IF-THEN-ELSE, vous permettant de renvoyer des valeurs spécifiques lorsque certaines conditions sont remplies et d’autres valeurs sinon.
Syntaxe de l’Instruction CASE
La syntaxe de base de l’instruction CASE est la suivante :
CASE
WHEN condition1 THEN result1
WHEN condition2 THEN result2
...
ELSE resultN
END
Chaque condition est évaluée en séquence, et le résultat de la première condition vraie est renvoyé. Si toutes les conditions sont fausses, la partie ELSE du résultat est renvoyée. Si ELSE est omis, NULL est renvoyé si toutes les conditions sont fausses.
Exemple Simple
Par exemple, pour évaluer les salaires des employés et attribuer des notes en fonction de plages spécifiques, utilisez l’instruction CASE comme suit :
SELECT name,
CASE
WHEN salary >= 100000 THEN 'High'
WHEN salary >= 50000 THEN 'Medium'
ELSE 'Low'
END AS salary_rating
FROM employees;
Dans cet exemple, un salaire de 100000 ou plus renvoie « High », 50000 ou plus renvoie « Medium », et tout le reste renvoie « Low ».
Combiner les Instructions COUNT et CASE
En combinant la fonction COUNT avec des instructions CASE, vous pouvez compter les données en fonction de conditions spécifiques. Cela vous permet d’évaluer et d’agréger plusieurs conditions dans une seule requête.
Syntaxe de Base pour le Comptage Conditionnel
La syntaxe de base pour combiner la fonction COUNT avec des instructions CASE est la suivante :
SELECT
COUNT(CASE WHEN condition1 THEN 1 END) AS count_condition1,
COUNT(CASE WHEN condition2 THEN 1 END) AS count_condition2
FROM table_name;
Cette syntaxe compte le nombre de lignes qui répondent à chaque condition. L’instruction CASE renvoie 1 lorsqu’elle est vraie, et la fonction COUNT compte ces occurrences.
Exemple Spécifique
Par exemple, pour compter le nombre de clients masculins et féminins dans une table de clients, utilisez la requête suivante :
SELECT
COUNT(CASE WHEN gender = 'Male' THEN 1 END) AS male_count,
COUNT(CASE WHEN gender = 'Female' THEN 1 END) AS female_count
FROM customers;
Cet exemple compte les lignes où le genre est ‘Male’ et ‘Female’ respectivement.
Compter Plusieurs Conditions
En combinant plusieurs conditions, vous pouvez compter les données de manière plus détaillée. Par exemple, pour compter le nombre de produits avec les statuts ‘On Sale’ et ‘Discontinued’, utilisez la requête suivante :
SELECT
COUNT(CASE WHEN status = 'On Sale' THEN 1 END) AS on_sale_count,
COUNT(CASE WHEN status = 'Discontinued' THEN 1 END) AS discontinued_count
FROM products;
Cette méthode facilite l’agrégation des données en fonction de conditions spécifiques.
Exemples de Requêtes SQL
Ici, nous présentons des exemples spécifiques de requêtes SQL qui combinent la fonction COUNT et les instructions CASE pour compter les données en fonction de conditions spécifiques. Cela vous aidera à comprendre comment les utiliser dans des opérations de base de données réelles.
Exemple 1 : Compter les Clients par Tranche d’Âge
Cette requête compte les clients dans différentes tranches d’âge à partir d’une table de clients.
SELECT
COUNT(CASE WHEN age < 20 THEN 1 END) AS 'Under 20',
COUNT(CASE WHEN age BETWEEN 20 AND 29 THEN 1 END) AS '20s',
COUNT(CASE WHEN age BETWEEN 30 AND 39 THEN 1 END) AS '30s',
COUNT(CASE WHEN age BETWEEN 40 AND 49 THEN 1 END) AS '40s',
COUNT(CASE WHEN age >= 50 THEN 1 END) AS '50 and above'
FROM customers;
Cette requête catégorise les clients en cinq tranches d’âge et compte le nombre dans chaque groupe.
Exemple 2 : Compter les Produits par Statut
Cette requête compte le nombre de produits par leur statut à partir d’une table de produits.
SELECT
COUNT(CASE WHEN status = 'In Stock' THEN 1 END) AS 'In Stock',
COUNT(CASE WHEN status = 'Out of Stock' THEN 1 END) AS 'Out of Stock',
COUNT(CASE WHEN status = 'Discontinued' THEN 1 END) AS 'Discontinued'
FROM products;
Cette requête compte le nombre de produits avec les statuts ‘In Stock’, ‘Out of Stock’, et ‘Discontinued’.
Exemple 3 : Compter les Commandes par Statut
Cette requête compte le nombre de commandes par leur statut à partir d’une table de commandes.
SELECT
COUNT(CASE WHEN status = 'New' THEN 1 END) AS 'New Orders',
COUNT(CASE WHEN status = 'Processing' THEN 1 END) AS 'Processing Orders',
COUNT(CASE WHEN status = 'Completed' THEN 1 END) AS 'Completed Orders'
FROM orders;
Cette requête compte le nombre de commandes avec les statuts ‘New’, ‘Processing’, et ‘Completed’.
Exemples Avancés
La combinaison de la fonction COUNT et des instructions CASE peut être appliquée à des conditions plus complexes pour l’agrégation des données. Voici quelques exemples pratiques qui peuvent être utiles dans des scénarios réels.
Exemple 1 : Compter les Clients Basé sur l’Historique des Achats
Cette requête compte les clients en fonction de s’ils ont effectué un achat au cours de la dernière année, en utilisant une table de clients et une table d’historique des achats.
SELECT
COUNT(CASE WHEN purchase_date >= DATEADD(YEAR, -1, GETDATE()) THEN 1 END) AS 'Customers Purchased in Last Year',
COUNT(CASE WHEN purchase_date < DATEADD(YEAR, -1, GETDATE()) OR purchase_date IS NULL THEN 1 END) AS 'Customers Not Purchased in Last Year'
FROM customers LEFT JOIN purchase_history ON customers.customer_id = purchase_history.customer_id;
Cette requête compte les clients qui ont effectué un achat au cours de la dernière année et ceux qui ne l’ont pas fait.
Exemple 2 : Compter les Ventes par Catégorie de Produit
Cette requête compte le nombre de ventes par catégorie de produit, en joignant la table des ventes avec la table des produits.
SELECT
product_category,
COUNT(CASE WHEN sales_amount > 0 THEN 1 END) AS 'Sales Count'
FROM sales
JOIN products ON sales.product_id = products.product_id
GROUP BY product_category;
Cette requête compte le nombre de produits vendus dans chaque catégorie de produit.
Exemple 3 : Compter Plusieurs Conditions
Cette requête compte les données en combinant plusieurs conditions. Par exemple, compter le statut d’achat des clients par tranche d’âge.
SELECT
COUNT(CASE WHEN age < 20 AND purchase_date IS NOT NULL THEN 1 END) AS 'Customers Under 20 Who Purchased',
COUNT(CASE WHEN age BETWEEN 20 AND 29 AND purchase_date IS NOT NULL THEN 1 END) AS 'Customers in 20s Who Purchased',
COUNT(CASE WHEN age BETWEEN 30 AND 39 AND purchase_date IS NOT NULL THEN 1 END) AS 'Customers in 30s Who Purchased',
COUNT(CASE WHEN age BETWEEN 40 AND 49 AND purchase_date IS NOT NULL THEN 1 END) AS 'Customers in 40s Who Purchased',
COUNT(CASE WHEN age >= 50 AND purchase_date IS NOT NULL THEN 1 END) AS 'Customers 50 and Above Who Purchased'
FROM customers LEFT JOIN purchase_history ON customers.customer_id = purchase_history.customer_id;
Cette requête compte le nombre de clients ayant un historique d’achat par tranche d’âge.
Conclusion
Combiner la fonction COUNT avec des instructions CASE permet de compter efficacement les données en fonction de conditions spécifiques en SQL. Cette méthode est utile non seulement pour l’agrégation simple mais aussi pour évaluer et analyser les données avec plusieurs conditions à la fois. À travers des exemples de requêtes spécifiques, nous avons appris comment appliquer ces techniques dans des opérations de base de données réelles, telles que le comptage de clients par tranche d’âge ou le statut des produits. Utiliser ces techniques permet une analyse de données plus avancée et la création de rapports.