Mysql
 sql >> Database >  >> RDS >> Mysql

Perché ho bisogno di OR NULL in MySQL quando conto le righe con una condizione

Questo dovrebbe rivelare tutto

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

Uscita

1   |   0   |   1   |   NULL

Fatti

  1. COUNT somma le colonne/espressioni che restituiscono NOT NULL. Qualsiasi cosa aumenterà di 1, purché non sia nullo. L'eccezione è COUNT(DISTINCT) dove aumenta solo se non è già contato.

  2. Quando un'espressione BOOLEAN viene utilizzata da sola, restituisce 1 o 0.

  3. Quando un booleano è OR -ed con NULL, è NULL solo quando è 0 (falso)

Agli altri

Sì, se il conteggio è l'UNICA colonna desiderata, è possibile utilizzare WHERE value=4 ma se è una query che vuole contare i 4 oltre a recuperando altri conteggi/aggregati, il filtro non funziona. Un'alternativa sarebbe stata SUM(value=4) , ad es.

SELECT sum(value=4)
  FROM test