Compter les valeurs uniques
Utilisez COUNT(DISTINCT ...) en pratique.
Compter les valeurs uniques est une leçon SQL Academy gratuite sur CoddyKit. Ceci est la leçon 4 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage SQL Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours SQL Academy comprend 4 leçons au total.
Pourquoi compter les valeurs uniques ?
Lorsque vous utilisez COUNT(*), vous comptez chaque ligne — y compris les doublons. Mais parfois, vous voulez simplement savoir combien de valeurs distinctes existent dans une colonne.
Par exemple : combien de pays différents sont représentés parmi vos clients ? Combien de produits uniques ont été commandés le mois dernier ? C'est là qu'intervient COUNT(DISTINCT ...).
Créer une table d'exemple
Créons une table commandes pour nous exercer. Chaque commande comporte un nom de client, un produit et un pays.
Remarquez que certains clients et certains pays apparaissent plusieurs fois — c'est intentionnel, afin que nous puissions voir la différence entre compter toutes les lignes et compter les valeurs distinctes.
CREATE TABLE orders (
id INT,
customer VARCHAR(50),
product VARCHAR(50),
country VARCHAR(50)
);
INSERT INTO orders VALUES
(1, 'Alice', 'Laptop', 'USA'),
(2, 'Bob', 'Phone', 'UK'),
(3, 'Alice', 'Tablet', 'USA'),
(4, 'Carol', 'Laptop', 'Canada'),
(5, 'Bob', 'Laptop', 'UK'),
(6, 'Dave', 'Phone', 'USA'),
(7, 'Carol', 'Phone', 'Canada'),
(8, 'Eve', 'Tablet', 'Germany');COUNT(*) ou COUNT(DISTINCT)
Exécutez les deux requêtes et comparez les résultats. COUNT(*) renvoie 8 — une pour chaque ligne. COUNT(DISTINCT client) renvoie 5 — car il n'y a que 5 clients uniques (Alice, Bob, Carol, Dave et Eve).
Voici l'idée essentielle : COUNT(DISTINCT column) ignore les valeurs répétées et ne compte que les valeurs uniques.
SELECT COUNT(*) AS total_orders,
COUNT(DISTINCT customer) AS unique_customers
FROM orders;Compter les pays distincts
Voyons combien de pays différents sont représentés parmi nos clients. Même si la table commandes comporte 8 lignes, plusieurs lignes contiennent le même pays.
Le résultat sera 4 — USA, UK, Canada et Allemagne — quel que soit le nombre d'occurrences de chaque pays.
SELECT COUNT(DISTINCT country) AS unique_countries
FROM orders;Compter les produits distincts
Nous pouvons appliquer le même principe à n'importe quelle colonne. Ici, nous comptons le nombre de produits différents qui ont été commandés.
Même si « ordinateur portable » apparaît trois fois et « téléphone » apparaît trois fois, chaque produit n'est compté qu'une seule fois. La réponse est 3 : ordinateur portable, téléphone et tablette.
SELECT COUNT(DISTINCT product) AS unique_products
FROM orders;Utiliser COUNT(DISTINCT) avec WHERE
Vous pouvez combiner COUNT(DISTINCT ...) avec une clause WHERE pour restreindre les lignes avant le comptage. Ici, nous comptons les produits distincts commandés uniquement par des clients des USA.
Seules les lignes où pays = 'USA' sont prises en compte, puis nous comptons les produits uniques parmi ces lignes.
SELECT COUNT(DISTINCT product) AS usa_unique_products
FROM orders
WHERE country = 'USA';COUNT(DISTINCT) avec GROUP BY
Associé à GROUP BY, COUNT(DISTINCT ...) fournit des comptages distincts pour chaque groupe. Cette requête répond à la question suivante : pour chaque pays, combien de clients uniques ont passé une commande ?
Chaque groupe est traité indépendamment, de sorte que les doublons au sein d'un groupe sont supprimés avant le comptage.
SELECT country,
COUNT(DISTINCT customer) AS unique_customers
FROM orders
GROUP BY country
ORDER BY unique_customers DESC;Compter les valeurs distinctes de plusieurs colonnes
Vous pouvez utiliser plusieurs expressions COUNT(DISTINCT ...) dans un même SELECT. Cela vous donne rapidement une vue d'ensemble de la cardinalité — le nombre de valeurs uniques que contient chaque colonne — le tout dans une seule requête.
La cardinalité est une métrique utile lorsque vous explorez un nouvel ensemble de données.
SELECT COUNT(DISTINCT customer) AS unique_customers,
COUNT(DISTINCT product) AS unique_products,
COUNT(DISTINCT country) AS unique_countries
FROM orders;Traitement de NULL
Tout comme COUNT(colonne) classique, COUNT(DISTINCT column) ignore les valeurs NULL. Une valeur NULL n'est pas comptée comme une valeur unique.
Dans cet exemple, deux lignes ont un pays NULL. Le résultat reste de 4 pays distincts non NULL, et non de 5.
INSERT INTO orders VALUES
(9, 'Frank', 'Phone', NULL),
(10, 'Grace', 'Laptop', NULL);
SELECT COUNT(DISTINCT country) AS unique_countries_no_null
FROM orders;Comparer COUNT(*), COUNT(colonne) et COUNT(DISTINCT colonne)
Il est utile de voir les trois formes de COUNT côte à côte :
- COUNT(*) — compte toutes les lignes, y compris celles contenant NULL
- COUNT(pays) — compte les lignes où le pays n'est pas NULL
- COUNT(DISTINCT pays) — compte les valeurs uniques de pays non NULL
Exécutez cette requête sur la table mise à jour (désormais composée de 10 lignes, dont 2 avec un pays NULL) pour confirmer les différences.
SELECT COUNT(*) AS total_rows,
COUNT(country) AS non_null_countries,
COUNT(DISTINCT country) AS unique_countries
FROM orders;Cas d'utilisation concret : utilisateurs actifs quotidiens
L'une des utilisations les plus courantes de COUNT(DISTINCT ...) en analyse de données consiste à compter les utilisateurs actifs quotidiens (DAU). Vous disposez d'un journal d'événements et vous voulez savoir combien d'utilisateurs uniques ont été actifs chaque jour.
Utilisez GROUP BY sur la date et COUNT(DISTINCT identifiant_utilisateur) pour obtenir le nombre d'utilisateurs distincts par jour — les doublons dus aux clics répétés d'un même utilisateur sont automatiquement exclus.
CREATE TABLE user_events (
event_date DATE,
user_id INT
);
INSERT INTO user_events VALUES
('2024-01-01', 1), ('2024-01-01', 2), ('2024-01-01', 1),
('2024-01-02', 2), ('2024-01-02', 3), ('2024-01-02', 2),
('2024-01-03', 1), ('2024-01-03', 4);
SELECT event_date,
COUNT(DISTINCT user_id) AS daily_active_users
FROM user_events
GROUP BY event_date
ORDER BY event_date;Vérification rapide
Testez votre compréhension de COUNT(DISTINCT ...) avec cette question.
Récapitulatif de la leçon
Excellent travail ! Voici un résumé de ce que vous avez appris sur COUNT(DISTINCT ...) :
COUNT(DISTINCT column)compte uniquement les valeurs uniques et non NULL d'une colonne.- Il diffère de
COUNT(*)(toutes les lignes) et deCOUNT(column)(les lignes non NULL). - Il fonctionne avec WHERE pour filtrer les lignes avant le comptage.
- Il fonctionne avec GROUP BY pour compter les valeurs distinctes dans chaque groupe.
- Les valeurs NULL sont toujours exclues du comptage distinct.
- Plusieurs expressions
COUNT(DISTINCT ...)peuvent apparaître dans un même SELECT. - Parmi les utilisations courantes dans le monde réel figurent le comptage des utilisateurs, produits, pays et sessions uniques.
Maîtriser cette fonction vous fournit un outil puissant pour explorer les données et effectuer des analyses.
Questions Fréquemment Posées
La leçon « Compter les valeurs uniques » est-elle gratuite ?
Oui — le texte complet de « Compter les valeurs uniques » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours SQL Academy, passe à CoddyKit PRO. Le cours SQL Academy comprend 4 leçons au total.
Qu'est-ce que j'apprendrai dans « Compter les valeurs uniques » ?
Utilisez COUNT(DISTINCT ...) en pratique. Tu pratiques SQL Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.
Dois-je avoir de l'expérience pour commencer SQL Academy ?
Aucune expérience préalable n'est requise. SQL Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 4 sur 4.
Combien de temps prend la leçon « Compter les valeurs uniques » ?
La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.
Peux-tu écrire et exécuter du code dans cette leçon SQL Academy ?
Oui. Chaque leçon SQL Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.
Toutes les leçons de ce cours
- Principes de SELECT DISTINCT
- DISTINCT sur plusieurs colonnes
- DISTINCT ON de PostgreSQL
- Compter les valeurs uniques