sql >> Base de Datos >  >> RDS >> Mysql

¿Por qué necesito OR NULL en MySQL cuando cuento filas con una condición?

Esto debería revelar todo

SELECT 4=4, 3=4, 1 or null, 0 or null

Salida

1   |   0   |   1   |   NULL

Hechos

  1. COUNT suma las columnas/expresiones que se evalúan como NOT NULL. Cualquier cosa se incrementará en 1, siempre que no sea nulo. La excepción es COUNT(DISTINCT) donde se incrementa solo si aún no se ha contado.

  2. Cuando se usa una expresión BOOLEAN por sí sola, devuelve 1 o 0.

  3. Cuando un booleano es OR -ed con NULL, es NULL solo cuando es 0 (falso)

A los demás

Sí, si el conteo es la ÚNICA columna deseada, se podría usar WHERE value=4 pero si es una consulta que quiere contar los 4 así como recuperando otros conteos/agregados, entonces el filtro no funciona. Una alternativa hubiera sido SUM(value=4) , por ejemplo

SELECT sum(value=4)
  FROM test