Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Por que preciso de OR NULL no MySQL ao contar linhas com uma condição


Isso deve revelar tudo
SELECT 4=4, 3=4, 1 or null, 0 or null

Saída
1   |   0   |   1   |   NULL

Fatos

  1. COUNT soma as colunas/expressões que são avaliadas como NOT NULL. Qualquer coisa será incrementada em 1, desde que não seja nula. A exceção é COUNT(DISTINCT) onde ela é incrementada somente se ainda não for contada.

  2. Quando uma expressão BOOLEAN é usada sozinha, ela retorna 1 ou 0.

  3. Quando um booleano é OR -ed com NULL, é NULL somente quando é 0 (falso)

Para outros

Sim, se a contagem for a ÚNICA coluna desejada, pode-se usar WHERE value=4 mas se for uma consulta que queira contar os 4 assim como recuperando outras contagens/agregados, o filtro não funciona. Uma alternativa seria SUM(value=4) , por exemplo.
SELECT sum(value=4)
  FROM test