Mysql
 sql >> Base de données >  >> RDS >> Mysql

Pourquoi ai-je besoin de OR NULL dans MySQL lors du comptage de lignes avec une condition

Cela devrait tout révéler

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

Sortie

1   |   0   |   1   |   NULL

Faits

  1. COUNT additionne les colonnes/expressions évaluées comme NOT NULL. Tout sera incrémenté de 1, tant qu'il n'est pas nul. L'exception est COUNT(DISTINCT) où il n'incrémente que s'il n'est pas déjà compté.

  2. Lorsqu'une expression BOOLEAN est utilisée seule, elle renvoie soit 1 soit 0.

  3. Lorsqu'un booléen est OR -ed avec NULL, c'est NULL seulement quand c'est 0 (faux)

Aux autres

Oui si le nombre est la SEULE colonne souhaitée, on peut utiliser WHERE value=4 mais si c'est une requête qui veut compter les 4 ainsi que en récupérant d'autres décomptes/agrégats, le filtre ne fonctionne pas. Une alternative aurait été SUM(value=4) , par exemple

SELECT sum(value=4)
  FROM test