заменить контент после выполнения запроса - PullRequest
0 голосов
/ 15 ноября 2018

Мне нужно заменить все возможные результаты, равные '0', на значение NULL. Какой самый лучший вариант? Используйте оператор case или замените команду в этом случае:

SELECT name, COUNT(IF(stat='open',1, NULL)) 'open',
       COUNT(IF(stat='close',1, NULL)) 'close',
       COUNT(IF(stat='all',1, NULL)) 'all',
       COUNT(IF(stat='reopen',1, NULL)) 'reopen',
       COUNT(IF(stat='finish',1, NULL)) 'finish'
FROM dashboard group by name order by name = 'Party' desc

+----------+------+-------+-----+--------+--------+
| name     | open | close | all | reopen | finish |
+----------+------+-------+-----+--------+--------+
| Party    |   21 |     0 |   0 |      0 |      0 |
+----------+------+-------+-----+--------+--------+

Ответы [ 2 ]

0 голосов
/ 15 ноября 2018

Один метод использует NULLIF():

SELECT name,
       NULLIF(SUM(stat = 'open'), 0) as open,
       NULLIF(SUM(stat = 'close'), 0) as close,
       NULLIF(SUM(stat = 'all'), 0) as all,
       NULLIF(SUM(stat = 'reopen'), 0) as reopen,
       NULLIF(SUM(stat = 'finish'), 0) as finish
FROM dashboard 
GROUP BY name 
ORDER BY name = 'Party' desc;

Другой метод использует CASE:

SELECT SUM(CASE WHEN stat = 'open' THEN 1 END) as open,
       . . .
0 голосов
/ 15 ноября 2018

Вы можете использовать функцию NULLIF().

SELECT name, 
       NULLIF(COUNT(IF(stat='open',1, NULL)), 0) 'open',
       NULLIF(COUNT(IF(stat='close',1, NULL)), 0) 'close',
       NULLIF(COUNT(IF(stat='all',1, NULL)), 0) 'all',
       NULLIF(COUNT(IF(stat='reopen',1, NULL)), 0) 'reopen',
       NULLIF(COUNT(IF(stat='finish',1, NULL)), 0) 'finish'
FROM dashboard 
group by name 
order by name = 'Party' desc

NULLIF() возвращает первое значение, если оно не равно второму значению, затем возвращается NULL.

Кстати, вы можете упростить COUNT(IF(stat='xxx', 1, NULL)) до SUM(stat='xxx').

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...