Как посчитать и получить значение NULL, а не NULL для одного столбца в MySQL?
туЬаЫе
---------------------------------------------------
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 |
---------------------------------------------------
Ожидаемый результат
month register visited not visited
---------------------------------------------
05-2014 2 1 1
---------------------------------------------
04-2014 5 2 3
---------------------------------------------
count(visited)
. count (<столбец>) будет считать только не ноль. Если добавить еще один уровень вложенности, count_not_visited можно определить какcount_registered - count_visited
Для подсчета всех ненулевых значений для столбца, скажем
col1
, вы можете просто использоватьcount(col1) as cnt_col1
. Но, чтобы быть более очевидным, вы можете использоватьsum()
функцию иIS NOT NULL
оператор, ставsum(col1 IS NOT NULL)
. Это потому, чтоIS NOT NULL
оператор возвращает int: 1 для true и 0 для false.Для подсчета нулевых значений вы можете использовать
IS NULL
оператор, который возвращает 1, когда значение нулевое. Как и раньше, сsum()
оператором.Учитывая, что для того, чтобы регистрироваться, посещать и не посещать каждый месяц, вот что вы можете сделать:
Обратите внимание, что вы можете вывести «не посещенный» столбец с пробелом, просто заключив в кавычки, двойные кавычки или используя обратные галочки (`).
Другой подход к выбору и группировке по месяцам состоит в том, чтобы соединять месяц с годом, как это
concat(month(registDate), '-', date(registDate))
. Но это менее элегантно.case
Оператор , предложенный в других ответах вполне допустим, но я думаю , что более адекватным для других ситуаций. И это более многословно.источник