Esto debería revelar todo
SELECT 4=4, 3=4, 1 or null, 0 or null
Salida
1 | 0 | 1 | NULL
Hechos
-
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.
-
Cuando se usa una expresión BOOLEAN por sí sola, devuelve 1 o 0.
-
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