Wie kann man in MySQL null und nicht null in derselben Spalte zählen und abrufen?
mein Tisch
---------------------------------------------------
id | name | visited | registDate |
---------------------------------------------------
1 | george | NULL | 2014-04-01 |
---------------------------------------------------
2 | Thomas | NULL | 2014-04-15 |
---------------------------------------------------
3 | Wilfred | 1 | 2014-04-24 |
---------------------------------------------------
4 | paul | 1 | 2014-04-10 |
---------------------------------------------------
5 | elina | NULL | 2014-05-03 |
---------------------------------------------------
6 | angela | NULL | 2014-04-13 |
---------------------------------------------------
7 | elina | 1 | 2014-05-18 |
---------------------------------------------------
Erwartetes Ergebnis
month register visited not visited
---------------------------------------------
05-2014 2 1 1
---------------------------------------------
04-2014 5 2 3
---------------------------------------------
count(visited)
. count (<column>) zählt nur nicht null. Wenn Sie eine weitere Verschachtelungsebene hinzufügen, kann count_not_visited alscount_registered - count_visited
Um beispielsweise alle Nicht-Null-Werte für eine Spalte zu zählen,
col1
können Sie nur verwendencount(col1) as cnt_col1
. Um jedoch offensichtlicher zu sein, können Sie diesum()
Funktion und denIS NOT NULL
Operator verwenden, um zu werdensum(col1 IS NOT NULL)
. Dies liegt daran, dass derIS NOT NULL
Operator ein int: 1 für true und 0 für false zurückgibt.Um Nullwerte zu zählen, können Sie den
IS NULL
Operator verwenden, der 1 zurückgibt, wenn der Wert Null ist. Wie zuvor mit demsum()
Bediener.In Anbetracht dessen, dass Sie Folgendes tun können, um sich für jeden Monat registrieren, besuchen und nicht besuchen zu lassen:
Beachten Sie, dass Sie die Spalte "Nicht besucht" mit dem Leerzeichen ausgeben können, indem Sie einfach zitieren, doppelt zitieren oder Backticks (`) verwenden.
Ein anderer Ansatz zur Auswahl und Gruppierung nach Monat wäre die Verkettung von Monat und Jahr wie folgt
concat(month(registDate), '-', date(registDate))
. Aber es ist weniger elegant.Der
case
in anderen Antworten vorgeschlagene Operator ist vollkommen gültig, aber ich denke, dass er für andere Situationen angemessener ist. Und es ist ausführlicher.quelle