- 1 1. Introduction
- 2 2. Bases du comptage de données dans MySQL (COUNT)
- 3 3. Récupérer des données sans doublons (DISTINCT)
- 4 4. Comment utiliser COUNT(DISTINCT column_name)
- 5 5. Utiliser COUNT(DISTINCT) avec plusieurs colonnes
- 6 6. Optimisation des performances pour COUNT(DISTINCT)
- 7 7. Erreurs courantes et solutions pour COUNT(DISTINCT)
- 8 8. Questions fréquemment posées (FAQ)
- 9 9. Conclusion
1. Introduction
Lorsque vous gérez une base de données, vous pouvez rencontrer des situations telles que : « Combien de pays différents ont été enregistrés ? » ou « Combien d’adresses e‑mail uniques existent‑il ? »
Dans ces cas, vous pouvez utiliser COUNT(DISTINCT column_name) de MySQL pour obtenir le nombre d’enregistrements tout en éliminant les doublons.
Cet article explique en détail les sujets suivants :
- Les bases de
COUNT()etDISTINCT - L’utilisation correcte de
COUNT(DISTINCT column_name) - Comment compter des valeurs uniques sur plusieurs colonnes
- Comment améliorer les performances de
COUNT(DISTINCT)
Même les débutants peuvent facilement comprendre ce guide, car nous expliquons tout avec des exemples pratiques et des requêtes SQL. Assurez‑vous de lire jusqu’à la fin.
2. Bases du comptage de données dans MySQL (COUNT)
Lors de l’analyse de données dans une base, la fonction la plus fondamentale est COUNT().
Commençons par comprendre comment fonctionne COUNT().
2.1 Différence entre COUNT(*) et COUNT(column_name)
La fonction COUNT() de MySQL peut être utilisée de deux manières :
| COUNT Function | Description |
|---|---|
COUNT(*) | Counts all records in the table (including NULL values) |
COUNT(column_name) | Counts non-NULL values in a specific column |
2.2 Exemples de base de COUNT()
Ici, nous utiliserons la table users suivante comme exemple :
| id | name | country | |
|---|---|---|---|
| 1 | Taro | taro@example.com | Japan |
| 2 | Hanako | hanako@example.com | Japan |
| 3 | John | NULL | United States |
| 4 | Tanaka | tanaka@example.com | Japan |
① Récupérer le nombre total d’enregistrements dans la table
SELECT COUNT(*) FROM users;
→ Résultat : 4 (nombre total d’enregistrements)
② Récupérer le nombre de valeurs non NULL dans une colonne spécifique
SELECT COUNT(email) FROM users;
→ Résultat : 3 (nombre de valeurs email non NULL)
💡 Points clés :
COUNT(*)récupère le nombre total d’enregistrements y compris les valeurs NULL.COUNT(email)exclut les valeurs NULL lors du comptage.

3. Récupérer des données sans doublons (DISTINCT)
Lors d’une agrégation de données, il arrive souvent que vous ne souhaitiez récupérer que des valeurs uniques.
Dans ces situations, DISTINCT est très utile.
3.1 Bases de DISTINCT
DISTINCT sert à éliminer les données dupliquées d’une colonne spécifiée et à renvoyer des résultats uniques.
Syntaxe de base
SELECT DISTINCT column_name FROM table_name;
3.2 Exemple d’utilisation de DISTINCT
En exécutant la requête SQL suivante, vous pouvez obtenir la liste des noms de pays uniques enregistrés par les utilisateurs.
SELECT DISTINCT country FROM users;
→ Résultat :
| country |
|---|
| Japan |
| United States |
3.3 Différence entre DISTINCT et GROUP BY
| Feature | DISTINCT | GROUP BY |
|---|---|---|
| Purpose | Retrieve unique values | Perform aggregation by group |
| Usage | SELECT DISTINCT column_name | SELECT column_name, COUNT(*) GROUP BY column_name |
| Example | Retrieve unique countries | Count users per country |
💡 Points clés :
DISTINCTsupprime simplement les données dupliquées.GROUP BYregroupe les données et est utilisé avec les fonctions d’agrégation.
4. Comment utiliser COUNT(DISTINCT column_name)
En utilisant COUNT(DISTINCT column_name), vous pouvez obtenir le nombre de valeurs uniques.
4.1 Bases de COUNT(DISTINCT)
Syntaxe de base
SELECT COUNT(DISTINCT column_name) FROM table_name;
4.2 Exemple de COUNT(DISTINCT)
SELECT COUNT(DISTINCT country) FROM users;
→ Résultat : 2 (deux types : « Japan » et « United States »)
4.3 Utiliser COUNT(DISTINCT) avec des conditions
SELECT COUNT(DISTINCT email) FROM users WHERE country = 'Japan';
→ Résultat : 2 (nombre d’adresses e‑mail uniques enregistrées au Japon)
💡 Points clés :
COUNT(DISTINCT column_name)exclut les valeurs NULL et ne compte que les données uniques.- En ajoutant une clause
WHERE, vous pouvez compter les enregistrements qui répondent à des conditions spécifiques.
5. Utiliser COUNT(DISTINCT) avec plusieurs colonnes
Dans MySQL, COUNT(DISTINCT column1, column2) ne peut pas être utilisé directement. À la place, une solution courante consiste à combiner les colonnes avec CONCAT() et à les traiter comme une seule valeur.
5.1 Pourquoi COUNT(DISTINCT column1, column2) ne peut pas être utilisé
Dans MySQL, vous ne pouvez pas appliquer directement COUNT(DISTINCT) à plusieurs colonnes de cette façon : COUNT(DISTINCT column1, column2).
C’est une limitation propre à MySQL.
5.2 Comment compter les combinaisons uniques sur plusieurs colonnes
Pour compter les combinaisons uniques de plusieurs colonnes, l’approche typique consiste à combiner les colonnes en utilisant CONCAT() puis appliquer COUNT(DISTINCT) au résultat.
Exemple : Compter les combinaisons uniques de Pays et Ville
SELECT COUNT(DISTINCT CONCAT(country, '-', city)) FROM users;
💡 Points clés :
- Utiliser
CONCAT(colonne1, '-', colonne2)vous permet de combiner plusieurs colonnes en une seule valeur unique. COUNT(DISTINCT CONCAT(...))vous permet de récupérer le nombre de combinaisons uniques sur plusieurs colonnes.
6. Optimisation des performances pour COUNT(DISTINCT)
COUNT(DISTINCT) peut impacter les performances, il peut donc être nécessaire d’optimiser.
Lors du travail avec de grands ensembles de données, il est recommandé d’envisager l’utilisation d’index ou d’approches alternatives.
6.1 Pourquoi COUNT(DISTINCT) peut être lent
- MySQL parcourt souvent tous les enregistrements pour appliquer
DISTINCT. - Si les index ne sont pas correctement configurés, l’exécution de la requête devient plus lente.
- Un volume élevé de données dupliquées augmente la charge de calcul.
6.2 Optimisation des index pour accélérer COUNT(DISTINCT)
Lors du traitement de grandes quantités de données, vous pouvez améliorer les performances des requêtes en ajoutant un index à la colonne cible.
Comment ajouter un index
ALTER TABLE users ADD INDEX (country);
Vérifier le plan d’exécution de la requête en utilisant un index
EXPLAIN SELECT COUNT(DISTINCT country) FROM users;
💡 Points clés :
- L’utilisation de
EXPLAINvous permet de vérifier comment MySQL traite une requête. - L’application d’un index peut aider à éviter les scans complets de table et améliorer les performances de recherche.
6.3 Méthode alternative : GROUP BY + COUNT
Selon les besoins d’agrégation, l’utilisation de GROUP BY peut offrir de meilleures performances.
Exemple : Compter les données uniques avec GROUP BY
SELECT country, COUNT(*) FROM users GROUP BY country;
💡 Points clés :
GROUP BYpeut offrir de meilleures performances comparées àCOUNT(DISTINCT)dans certains cas.- Il est particulièrement utile lorsque vous devez regrouper et agréger les données simultanément.
7. Erreurs courantes et solutions pour COUNT(DISTINCT)
Lors de l’utilisation de COUNT(DISTINCT), vous pouvez rencontrer plusieurs erreurs courantes.
Ici, nous présentons les problèmes typiques et leurs solutions.
7.1 Erreur 1 : COUNT(DISTINCT column1, column2) ne peut pas être utilisé
Cause de l’erreur
Dans MySQL, COUNT(DISTINCT column1, column2) n’est pas pris en charge lorsqu’on cible plusieurs colonnes.
Utiliser cette syntaxe directement entraînera une erreur.
Solution : Utiliser CONCAT()
Vous pouvez éviter cette erreur en combinant plusieurs colonnes et en appliquant COUNT(DISTINCT) au résultat.
SELECT COUNT(DISTINCT CONCAT(country, '-', city)) FROM users;
💡 Points clés :
- Utiliser
CONCAT(colonne1, '-', colonne2)vous permet de créer des valeurs uniques à partir de plusieurs colonnes. COUNT(DISTINCT CONCAT(...))vous permet de récupérer les valeurs uniques pour chaque combinaison.
7.2 Erreur 2 : Résultats inattendus lorsque des valeurs NULL sont incluses
Cause de l’erreur
COUNT(DISTINCT nom_colonne)ignore les valeurs NULL, ce qui peut entraîner des résultats inattendus si la colonne contient des NULL.
Solution : Utiliser IFNULL()
Vous pouvez remplacer NULL par une autre valeur par défaut (par ex., '' ou 'unknown') pour assurer un comptage correct.
SELECT COUNT(DISTINCT IFNULL(email, 'unknown')) FROM users;
💡 Points clés :
- En utilisant
IFNULL(nom_colonne, 'valeur_par_defaut'), vous pouvez gérer les valeurs NULL de manière appropriée.
7.3 Erreur 3 : COUNT(DISTINCT) est lent
Cause de l’erreur
COUNT(DISTINCT)scanne toutes les données, ce qui peut entraîner des performances lentes avec de grands ensembles de données.
Solution : Utiliser des index
ALTER TABLE users ADD INDEX (country);
💡 Points clés :
- Ajouter des index peut améliorer les performances des requêtes.
- Utilisez
EXPLAINpour vérifier l’état d’optimisation de la requête.EXPLAIN SELECT COUNT(DISTINCT country) FROM users;
En appliquant ces mesures, vous pouvez améliorer la praticité de COUNT(DISTINCT) et éviter les problèmes de performance.
8. Questions fréquemment posées (FAQ)
Voici quelques questions fréquemment posées concernant COUNT(DISTINCT).
8.1 Quelle est la différence entre COUNT(*) et COUNT(DISTINCT column_name) ?
Principales différences
| Function | Description |
|---|---|
COUNT(*) | Counts all records (including NULL values) |
COUNT(DISTINCT column_name) | Counts unique values (excluding NULL values) |
Exemple d’utilisation
SELECT COUNT(*) FROM users;
SELECT COUNT(DISTINCT email) FROM users;
💡 Points clés :
COUNT(*)compte tous les enregistrements.COUNT(DISTINCT column_name)renvoie le nombre de valeurs uniques (excluant NULL).
8.2 Quelle est la différence entre DISTINCT et GROUP BY ?
| Feature | DISTINCT | GROUP BY |
|---|---|---|
| Purpose | Retrieve unique values | Perform aggregation by group |
| Usage | SELECT DISTINCT column_name | SELECT column_name, COUNT(*) GROUP BY column_name |
| Example | Retrieve unique countries | Count users per country |
Exemple d’utilisation
-- Using DISTINCT
SELECT DISTINCT country FROM users;
-- Using GROUP BY
SELECT country, COUNT(*) FROM users GROUP BY country;
💡 Points clés :
DISTINCTsupprime simplement les données dupliquées.GROUP BYregroupe les données et peut être combiné avec des fonctions d’agrégation.
8.3 COUNT(DISTINCT) est‑il lent ?
Problème
COUNT(DISTINCT)scanne toutes les données, ainsi les performances peuvent se dégrader avec de grands ensembles de données.
Solution : Utiliser des index
ALTER TABLE users ADD INDEX (country);
Approche alternative : Utiliser GROUP BY
SELECT country, COUNT(*) FROM users GROUP BY country;
💡 Points clés :
- L’application d’index peut améliorer les performances de recherche.
- L’utilisation de
GROUP BYpeut produire des résultats plus rapides queCOUNT(DISTINCT)dans certains cas.
8.4 Comment utiliser COUNT(DISTINCT column1, column2) ?
Problème
- Dans MySQL,
COUNT(DISTINCT column1, column2)n’est pas pris en charge.
Solution : Utiliser CONCAT()
SELECT COUNT(DISTINCT CONCAT(country, '-', city)) FROM users;
💡 Points clés :
- Utiliser
CONCAT(column1, '-', column2)vous permet de créer des valeurs uniques sur plusieurs colonnes. COUNT(DISTINCT CONCAT(...))vous permet de récupérer des combinaisons uniques.
En vous référant à ces questions, vous pouvez utiliser COUNT(DISTINCT) plus efficacement.
9. Conclusion
Dans cet article, nous avons expliqué en détail comment utiliser la fonction COUNT(DISTINCT) de MySQL.
Passons en revue les points clés.
9.1 Ce que vous avez appris dans cet article
✅ Comment compter les enregistrements dans MySQL
COUNT(*)récupère le nombre total d’enregistrementsCOUNT(column_name)compte les valeurs en excluant NULLCOUNT(DISTINCT column_name)récupère le nombre de valeurs uniques
✅ La différence entre DISTINCT et COUNT(DISTINCT)
DISTINCTrécupère les données avec les doublons supprimésCOUNT(DISTINCT column_name)compte le nombre de valeurs uniques
✅ Comment utiliser COUNT(DISTINCT) avec plusieurs colonnes
- Puisque MySQL ne supporte pas directement
COUNT(DISTINCT column1, column2), utilisezCONCAT()à la place
✅ Techniques d’optimisation des performances
- Appliquer des index pour améliorer les performances de recherche
- Utiliser
GROUP BY + COUNTpour des requêtes plus rapides lorsque c’est approprié
9.2 Ce que vous pouvez faire avec ces connaissances
En appliquant ces connaissances, vous pouvez réaliser les types d’agrégation de données suivants :
🔹 Compter les utilisateurs uniques
🔹 Récupérer le nombre d’enregistrements selon des conditions spécifiques
🔹 Compter les données uniques sur plusieurs colonnes
🔹 Optimiser les requêtes pour de grands ensembles de données
Lorsque vous effectuez des agrégations de données et des optimisations dans MySQL, assurez‑vous d’utiliser ce guide comme référence !


