2009-08-30 30 views
12

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?

Respuesta

16

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".

+0

¿Hay alguna manera de contar los nulos también, con COUNT (expresión)? –

+0

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

2

count(*) no es para columnas que no son nulas, es solo la manera de pedir contar todas las filas. Aproximadamente equivalente a count(1).

4

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.

+0

"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

12

Si desea contar los nulos, así, tratar

SELECT COUNT(IFNULL(col, 1)) FROM table; 
+0

Gran adición @Roey –