COUNT(*) ou COUNT(colonne) ou COUNT(DISTINCT)
La question classique sur la façon dont chaque forme de COUNT traite les NULL et les doublons
COUNT(*) ou COUNT(colonne) ou COUNT(DISTINCT) est une leçon SQL Interview Prep gratuite sur CoddyKit. Ceci est la leçon 1 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 Interview Prep, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours SQL Interview Prep comprend 4 leçons au total.
La question qui vous sera posée
Si vous passez un entretien SQL, attendez-vous à cette question dans les dix premières minutes : Quelle est la différence entre COUNT(*), COUNT(column) et COUNT(DISTINCT column) ?
Elle paraît triviale, mais les recruteurs l’utilisent pour vérifier que vous comprenez réellement comment les agrégats traitent les valeurs NULL et les doublons. Une réponse précise et assurée montre que vous avez écrit de vraies requêtes, et que vous n’avez pas seulement mémorisé la syntaxe.
Dans cette leçon, nous allons construire un modèle mental solide afin que vous puissiez répondre instantanément et expliquer pourquoi.
COUNT(*) compte les lignes
COUNT(*) compte les lignes. Il ne consulte aucune valeur de colonne, les NULL ne jouent donc aucun rôle. Si la table contient 100 lignes, COUNT(*) renvoie 100, tout simplement.
L’astérisque ne sert ni à multiplier ni à développer les colonnes ici. Il s’agit d’un jeton spécial qui signifie « compter chaque ligne correspondante ». C’est la forme à utiliser lorsque la question est simplement « combien d’enregistrements ? »
SELECT COUNT(*) AS total_rows
FROM employees;Données d’exemple pour raisonner
Appuyons-nous sur une petite table. Imaginez une table employees contenant une colonne department pouvant contenir NULL :
- Alice, Ventes
- Bob, Ventes
- Carol, NULL
- Dan, Ingénierie
- Eve, NULL
Elle contient au total 5 lignes. Trois lignes ont une valeur de département (Ventes, Ventes, Ingénierie) et deux lignes contiennent NULL. Gardez ces nombres à l’esprit : nous allons compter cette table de trois façons différentes.
COUNT(colonne) ignore les NULL
COUNT(column) compte uniquement les lignes dans lesquelles cette colonne est différente de NULL. Il ignore entièrement les valeurs NULL.
Avec nos données d’exemple, COUNT(department) renvoie 3, et non 5, car deux valeurs de département sont NULL. C’est le fait le plus important de toute la leçon : COUNT appliqué à une colonne ne compte jamais les NULL.
SELECT COUNT(department) AS depts_present
FROM employees;
-- returns 3 on our sample dataComparaison des deux jusqu’ici
Comparaison sur la même table de 5 lignes :
COUNT(*)= 5 (toutes les lignes)COUNT(department)= 3 (départements différents de NULL)
L’écart entre les deux, 5 moins 3, correspond au nombre de départements NULL. Astuce utile en entretien : COUNT(*) - COUNT(col) vous donne le nombre de NULL dans cette colonne sans écrire de clause WHERE distincte.
SELECT COUNT(*) - COUNT(department) AS null_departments
FROM employees;
-- returns 2COUNT(DISTINCT colonne)
COUNT(DISTINCT column) compte le nombre de valeurs uniques différentes de NULL. Il supprime d’abord les doublons, ignore ensuite les NULL, puis compte les valeurs restantes.
Dans nos données, les valeurs de département distinctes sont Ventes et Ingénierie, donc COUNT(DISTINCT department) renvoie 2. Les deux NULL ne sont pas comptés et le doublon Ventes est ramené à une seule valeur.
SELECT COUNT(DISTINCT department) AS unique_depts
FROM employees;
-- returns 2Les trois réunis
Vue d’ensemble pour notre table de 5 lignes :
COUNT(*)= 5 — lignesCOUNT(department)= 3 — valeurs différentes de NULLCOUNT(DISTINCT department)= 2 — valeurs uniques différentes de NULL
Si vous pouvez réciter cet ordre, en tenant compte des NULL puis des doublons, vous maîtrisez tout le concept. Remarquez que chaque forme renvoie une valeur inférieure ou égale à celle située au-dessus.
SELECT
COUNT(*) AS rows_total,
COUNT(department) AS depts_present,
COUNT(DISTINCT department) AS unique_depts
FROM employees;Une variante d’entretien résolue
Les recruteurs présentent souvent la question autrement : « Combien d’employés sont affectés à un département, et combien de départements distincts existe-t-il ? »
La première partie correspond à COUNT(department) (être affecté signifie que la valeur n’est pas NULL). La seconde correspond à COUNT(DISTINCT department). Savoir à quel COUNT correspond chaque formulation est exactement la compétence évaluée.
SELECT
COUNT(department) AS assigned_employees,
COUNT(DISTINCT department) AS distinct_departments
FROM employees;COUNT avec une condition
Une question complémentaire fréquente consiste à compter uniquement les lignes qui satisfont une condition. Une astuce claire et portable consiste à appliquer COUNT à une expression CASE. Comme COUNT(column) ignore les NULL, faites en sorte que CASE renvoie NULL pour les lignes à exclure.
Ici, nous comptons les employés du service Ventes. CASE produit une valeur uniquement pour les lignes du service Ventes et NULL dans les autres cas : COUNT ne dénombre donc que ces lignes.
SELECT
COUNT(CASE WHEN department = 'Sales' THEN 1 END) AS sales_count
FROM employees;
-- returns 2Erreurs fréquentes à éviter
Méfiez-vous de ces pièges tendus par les recruteurs :
- Supposer que
COUNT(column)est égal àCOUNT(*)— ce n’est vrai que lorsque la colonne ne contient aucun NULL. - Penser que
COUNT(DISTINCT col)inclut NULL comme une valeur distincte — ce n’est pas le cas. - Écrire
COUNT(1)en pensant qu’il ignore les NULL — il se comporte commeCOUNT(*)et compte toutes les lignes.
Mentionnez spontanément ces points en entretien pour montrer votre maîtrise du sujet.
COUNT(1) et COUNT(constante)
Les candidats demandent souvent quelle forme est la plus rapide, COUNT(*) ou COUNT(1). Réponse : elles sont identiques sémantiquement — toutes deux comptent chaque ligne, quels que soient les NULL — et les optimiseurs modernes les traitent de la même manière. Il n’y a donc pas de différence réelle de performances.
La constante dans COUNT(1) n’est jamais NULL, aucune ligne n’est donc ignorée. Préférez COUNT(*) pour plus de clarté : c’est la forme usuelle.
SELECT COUNT(*) AS a, COUNT(1) AS b
FROM employees;
-- a and b are always equalVérification rapide
Testez votre modèle mental sur la table d’exemple.
Récapitulatif
Vous maîtrisez maintenant la question sur les agrégats la plus fréquemment posée :
COUNT(*)compte chaque ligne, y compris les NULL.COUNT(column)compte uniquement les valeurs différentes de NULL.COUNT(DISTINCT column)compte les valeurs uniques différentes de NULL.COUNT(*) - COUNT(col)donne gratuitement le nombre de NULL.COUNT(1)est égal àCOUNT(*)— aucun NULL n’est ignoré et il n’y a pas de différence de vitesse.
Énoncez-le clairement et justifiez votre réponse. Ensuite : la façon dont SUM et AVG gèrent les NULL.
Questions Fréquemment Posées
La leçon « COUNT(*) ou COUNT(colonne) ou COUNT(DISTINCT) » est-elle gratuite ?
Oui — le texte complet de « COUNT(*) ou COUNT(colonne) ou COUNT(DISTINCT) » 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 Interview Prep, passe à CoddyKit PRO. Le cours SQL Interview Prep comprend 4 leçons au total.
Qu'est-ce que j'apprendrai dans « COUNT(*) ou COUNT(colonne) ou COUNT(DISTINCT) » ?
La question classique sur la façon dont chaque forme de COUNT traite les NULL et les doublons Tu pratiques SQL Interview Prep 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 Interview Prep ?
Aucune expérience préalable n'est requise. SQL Interview Prep 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 1 sur 4.
Combien de temps prend la leçon « COUNT(*) ou COUNT(colonne) ou COUNT(DISTINCT) » ?
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 Interview Prep ?
Oui. Chaque leçon SQL Interview Prep 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
- COUNT(*) ou COUNT(colonne) ou COUNT(DISTINCT)
- SUM et AVG avec des NULL
- MIN, MAX et agrégation non numérique
- Agrégats sans GROUP BY