85 votes

ce n' "select count(1) from table_name" sur toutes les tables de base de données moyenne

Lorsque nous exécutons sélectionnez count(*) from table_name il retourne le nombre de lignes.

Qu'est - count(1) faire? Qu'est - 1 signifie ici? Est-ce la même chose que count(*) , car il donne le même résultat sur l'exécution?

100voto

Jeffrey L Whitledge Points 27574

Le paramètre de la fonction de COMPTAGE est une expression qui est évaluée pour chaque ligne. La fonction COUNT retourne le nombre de lignes pour lesquelles l'expression renvoie une valeur non nulle. ( * est une expression particulière qui n'est pas évalué, il renvoie le nombre de lignes.)

Il y a deux autres modificateurs pour l'expression: TOUS et DISTINCTS. Ces de déterminer si les doublons sont éliminés. Puisque TOUT est la valeur par défaut, votre exemple est le même que le comte(1), ce qui signifie que les doubles sont conservés.

Car l'expression "1" prend la valeur non-null pour chaque ligne, et puisque vous n'êtes pas en supprimant les doublons, COUNT(1) doit toujours retourner le même nombre que COUNT(*).

26voto

Eddie Awad Points 2635

Voici un lien qui permettra de répondre à vos questions. En bref:

count(*) est la façon correcte d'écrire et count(1) est OPTIMISÉ POUR ÊTRE count(*) en interne-depuis

a) compter les lignes où 1 n'est pas nul est moins efficace que
b) compter les lignes

9voto

ChrisHDog Points 2107

Ceci est similaire à la différence entre

SELECT * FROM table_name and SELECT 1 FROM table_name.  

Si vous ne

SELECT 1 FROM table_name

il vous donnera le numéro 1 pour chaque ligne de la table. Donc oui count(*) et count(1) fournira les mêmes résultats que sera count(8) ou count(column_name)

6voto

Cade Roux Points 53870

Il n'y a pas de différence.

COUNT(1) est fondamentalement juste le comptage d'une valeur constante 1 colonne pour chaque ligne. Comme d'autres ici l'ont dit, c'est la même chose que COUNT(0) ou COUNT(42). Tout non-NULL de la valeur suffira.

http://asktom.oracle.com/pls/asktom/f?p=100:11:2603224624843292::::P11_QUESTION_ID:1156151916789

L'optimiseur Oracle n'a apparemment utiliser pour avoir des bugs, ce qui a causé le comte d'être touchés par la colonne qui vous avez choisi et que l'on était dans un index, de sorte que le NOMBRE(1) de la convention est entrée en être.

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