En 1 minute ~1 min de lecture

La différence entre COUNT(*) et COUNT(statut)

COUNT(statut) ne compte pas forcément toutes les lignes de votre table.

Carte présentant trois lignes dont les statuts sont actif, archivé et NULL : COUNT(*) compte trois lignes, tandis que COUNT(statut) compte deux valeurs non NULL.
Le diagramme montre pourquoi trois tickets ne donnent que deux valeurs comptées avec COUNT(statut).

En SQL, COUNT(expression) compte les lignes pour lesquelles cette expression n’est pas NULL. COUNT(statut) ne représente donc pas nécessairement le nombre total de lignes.

COUNT(*) compte toutes les lignes du résultat, même celles qui contiennent des NULL. Le premier mesure le nombre de valeurs renseignées ; le second, le nombre de lignes.

Une table tickets contient trois lignes dont les statuts sont ‘actif’, ‘archivé’ et NULL. La requête SELECT COUNT(*), COUNT(statut) FROM tickets renvoie respectivement 3 et 2. Pour compter les tickets, comptez les lignes, pas leur statut.

Dans le même esprit

À lire ensuite