Estoy en lo correcto al decir:MySQL COUNT() y los nulos
COUNT(expr)
WHERE expr IS NOT *
contará únicos no nulos?
¿Contendrá COUNT(*)
siempre todas las filas? Y ¿Qué pasa si todas las columnas son nulas?
Estoy en lo correcto al decir:MySQL COUNT() y los nulos
COUNT(expr)
WHERE expr IS NOT *
contará únicos no nulos?
¿Contendrá COUNT(*)
siempre todas las filas? Y ¿Qué pasa si todas las columnas son nulas?
Correcto. COUNT (*) es todas las filas en la tabla, COUNT (Expresión) es donde la expresión no es nula solamente.
Si todas las columnas son NULL (lo que indica que no tiene una clave principal, por lo que esto no debería suceder en una base de datos normalizada) COUNT (*) todavía devuelve todas las filas insertadas. Simplemente no hagas eso.
Puede pensar que el símbolo * significa "en la tabla" y no "en ninguna columna".
count(*)
no es para columnas que no son nulas, es solo la manera de pedir contar todas las filas. Aproximadamente equivalente a count(1)
.
acaba de comprobar:
select count (*)
devuelve 1 con un registro lleno de valores NULL
select count (campo)
vuelve 0.
i don No veo el punto en el registro con valores NULL. Tal registro no debe existir.
"No veo el punto en el registro con valores NULL". oh, solo vino a mi mente. ahora cuando dices esto, pensé que tenías razón, no pensé en eso cuando pregunté. – iceangel89
Si desea contar los nulos, así, tratar
SELECT COUNT(IFNULL(col, 1)) FROM table;
Gran adición @Roey –
¿Hay alguna manera de contar los nulos también, con COUNT (expresión)? –
Si hace un COUNT (*), todas las filas se cuentan sin importar el contenido de esas filas. Si desea ver el total de las filas * y * el recuento de filas con valores para SomeColumn, realice un SELECT COUNT (*) como AllRows, COUNT (SomeColumn) como SomeColumnCount. AllRows serán las filas totales devueltas por la consulta, mientras que SomeColumnCount será el recuento de filas donde SomeColumn tenía un valor. – Godeke