Ich brauche wirklich eine Erklärung dafür. Sagen Sie bitte die folgende Tabelle haben:SQL count case else 0 vs null
Columns:
id int(11) AI PK
user_id int(11)
is_complete int(11)
In der obigen Tabelle is_complete
entweder 1
oder 0
Jetzt werden Sie wollen etwas Zählen zu tun, so dass Sie die folgende SQL
Anweisung erstellen:
COUNT(CASE
WHEN is_complete = 0 THEN 1
ELSE 0
END) AS not_complete
Angenommen, das Ergebnis wäre:
(was falsch ist)
Nun ändern Sie genau die gleiche Aussage:
COUNT(CASE
WHEN is_complete = 0 THEN 1
ELSE null
END) AS not_complete
Hinweis ive geändert 0
zu null
Und Sie erhalten folgendes Ergebnis:
Nach einigen intensiven Tests werden Sie feststellen, dass die 1. falsche Aussage tatsächlich zählt, egal was passiert.
Meine Frage ist warum?
Da jeder Wert zählt, der nicht null ist, das ist, wie es funktioniert. Und "0" ist nicht null, "1" ist nicht null, und jeder andere Wert außer "NULL" wird gezählt. Wenn Sie 'THEN 1 ELSE 0 END 'verwenden möchten, verwenden Sie' SUM' anstelle von 'COUNT'. – Lamak
Also siehe Summe() ... – Strawberry
Warum verwenden Sie count (*) nicht aus der Tabelle where is_complete = 0 – Pirate