209 votes

Dans SQL, ce qui ' la différence entre count(column) et count(*) ?

J'ai la requête suivante:

select column_name, count(column_name)
from table
group by column_name
having count(column_name) > 1;

Quelle serait la différence si j'ai remplacé tous les appels d' count(column_name) de count(*)?

Cette question a été inspiré par Comment puis-je rechercher des doublons dans une table Oracle?.


Afin de clarifier la accepté de répondre (et peut-être que ma question), en remplacement de count(column_name) avec count(*) serait de retour une ligne supplémentaire dans le résultat qui contient un null et le nombre de null des valeurs de la colonne.

241voto

SQLMenace Points 68670

compte de valeurs NULL et ne fonctionne pas

[modifier] ajouté ce code afin que les gens peuvent l’exécuter

résultats 7 3 2

37voto

Brannon Points 12633

Une autre différence mineure, entre l’utilisation * et une colonne spécifique, n’est que dans le cas de colonne vous pouvez ajouter le mot clé DISTINCT et limiter le nombre de valeurs distinctes :

18voto

Alan Points 2190

Une différence supplémentaire et peut-être subtile est que, dans certaines implémentations de base de données, le count(*) est calculée en regardant les index sur la table en question plutôt que des lignes de données réelles. Puisque aucune colonne n’est spécifié, il n’y a pas besoin de s’embêter avec les lignes réelles et leurs valeurs (comme il n’y aurait si vous avez compté une colonne spécifique). Permettant à la base de données à utiliser les données d’index peut être considérablement plus rapide que rend à compter les lignes « réels ».

11voto

Cookey Points 1191

Comme expliqué dans le fichier d’aide :

Count(*) retourne le nombre d’éléments dans un groupe, y compris les doublons et les valeurs NULL.

Count(expression) évalue l’expression pour chaque ligne dans un groupe et renvoie le nombre de valeurs non null.

EDIT - c’était de la documentation en ligne, si vous ne l’avez pas installé vous pouvez le trouver ici.

10voto

Bill the Lizard Points 147311

Nous pouvons utiliser la Pile d'Échange de Données de l'Explorateur afin d'illustrer la différence avec une simple requête. La table des Utilisateurs dans le Débordement de la Pile de la base de données a des colonnes qui sont souvent vides, à l'instar de l'utilisateur, l'adresse du Site web.

-- count(column_name) vs. count(*)
-- Illustrates the difference between counting a column
-- that can hold null values, a  'not null' column, and  count(*)

select count(WebsiteUrl), count(Id), count(*) from Users

Si vous exécutez la requête ci-dessus dans l' Explorateur de Données, vous verrez que le nombre est le même pour count(Id) et count(*)parce que l' Id colonne ne permet pas l' null valeurs. L' WebsiteUrl nombre est beaucoup plus faible, bien que, parce que cette colonne permet à l' null.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X