Cuando lo ejecutamos select count(*) from table_name
devuelve el número de filas.
¿Qué hace count(1)
? ¿Qué 1
significa aquí? ¿Es lo mismo que count(*)
(ya que da el mismo resultado en la ejecución)?
Cuando lo ejecutamos select count(*) from table_name
devuelve el número de filas.
¿Qué hace count(1)
? ¿Qué 1
significa aquí? ¿Es lo mismo que count(*)
(ya que da el mismo resultado en la ejecución)?
Respuestas:
El parámetro de la función COUNT es una expresión que se evaluará para cada fila. La función COUNT devuelve el número de filas para las que la expresión se evalúa como un valor no nulo. (* es una expresión especial que no se evalúa, simplemente devuelve el número de filas).
Hay dos modificadores adicionales para la expresión: ALL y DISTINCT. Estos determinan si se descartan los duplicados. Dado que ALL es el valor predeterminado, su ejemplo es el mismo que count (ALL 1), lo que significa que se conservan los duplicados.
Dado que la expresión "1" se evalúa como no nula para cada fila, y dado que no está eliminando duplicados, COUNT (1) siempre debe devolver el mismo número que COUNT (*).
Aquí hay un enlace que le ayudará a responder sus preguntas. En breve:
count (*) es la forma correcta de escribirlo y count (1) está OPTIMIZADO PARA SER count (*) internamente, ya que
a) contar las filas donde 1 no es nulo es menos eficiente que
b) contar las filas
¿Diferencia entre count (*) y count (1) en Oracle?
count (*) significa que contará todos los registros, es decir, todas y cada una de las celdas PERO
count (1) significa que agregará una pseudocolumna con valor 1 y devuelve el recuento de todos los registros
Esto es similar a la diferencia entre
SELECT * FROM table_name and SELECT 1 FROM table_name.
Si lo haces
SELECT 1 FROM table_name
le dará el número 1 para cada fila de la tabla. Así que sí count(*)
y count(1)
proporcionará los mismos resultados que will count(8)
ocount(column_name)
No hay diferencia.
COUNT(1)
básicamente está contando una columna de valor constante 1 para cada fila. Como han dicho otros usuarios aquí, es lo mismo que COUNT(0)
o COUNT(42)
. Cualquier falta de NULL
valor será suficiente.
http://asktom.oracle.com/pls/asktom/f?p=100:11:2603224624843292::::P11_QUESTION_ID:1156151916789
El optimizador de Oracle aparentemente solía tener errores, lo que provocó que el recuento se viera afectado por la columna que eligió y si estaba en un índice, por lo que la convención COUNT (1) entró en vigor.
SELECT COUNT(1) from <table name>
debería hacer exactamente lo mismo que
SELECT COUNT(*) from <table name>
Puede que haya habido o todavía haya algunas razones por las que funcionaría mejor que SELECT COUNT(*)
en alguna base de datos, pero lo consideraría un error en la base de datos.
SELECT COUNT(col_name) from <table name>
sin embargo, tiene un significado diferente, ya que solo cuenta las filas con un valor no nulo para la columna dada.
en oráculo creo que estos tienen exactamente el mismo significado
Puedes probar así:
create table test1(
id number,
name varchar2(20)
);
insert into test1 values (1,'abc');
insert into test1 values (1,'abc');
select * from test1;
select count(*) from test1;
select count(1) from test1;
select count(ALL 1) from test1;
select count(DISTINCT 1) from test1;
Dependiendo de a quién le pregunte, algunas personas informan que la ejecución se select count(1) from random_table;
ejecuta más rápido que select count(*) from random_table
. Otros afirman que son exactamente iguales.
Este enlace afirma que la diferencia de velocidad entre los 2 se debe a un EXPLORACIÓN DE MESA COMPLETA frente a un EXPLORACIÓN COMPLETA RÁPIDA.