Mysql возвращает неверный счетчик статуса столбца - PullRequest
1 голос
/ 25 апреля 2020

Я пытаюсь получить список статусов заявок "в ожидании", "прогресс", "выполнено" в виде группы месяца. Я пытаюсь этот запрос, который дает мне неправильный результат

select  
count(id) as tickets,
month(created_at) as month,
(select count(status) from tickets where status =0) as pending,
(select count(status) from tickets where status =1) as progress,
(select count(status) from tickets where status =2) as completed
from tickets 
group by month

его возвращение, как показано в изображении

query returning as following

, что неверно, потому что У меня есть только один билет в Фев. моя таблица следующая

enter image description here

Ответы [ 2 ]

2 голосов
/ 25 апреля 2020

Поскольку у ваших подзапросов нет условий, они считают билеты за каждый месяц, а не только за месяц, за который вы агрегируете. Вы можете добавить это ограничение к подзапросам, но проще использовать условное агрегирование:

select count(id) as tickets,
       month(created_at) as month,
       sum(status = 0) as pending,
       sum(status = 1) as progress,
       sum(status = 2) as completed
from tickets 
group by month

Примечание, поскольку MySQL обрабатывает логические значения как 1 или 0 в числовом контексте c, вы можете просто суммировать логическое выражение вместо использования структуры типа IF(expression,1,0).

0 голосов
/ 25 апреля 2020

попробуйте это

select  count(id) as tickets,
month(created_at) as month,
(select count(status) from tickets where status =0 and id=T1.id) as pending,
(select count(status) from tickets where status =1 and id=T1.id) as progress,
(select count(status) from tickets where status =2 and id=T1.id) as completed
from tickets as T1
group by month

в вашем запросе подпункты не связаны с основным предложением, которое в основном выполняет один и тот же запрос для всех записей.

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