Группировка COUNT по дате и идентификатору из чужой таблицы - PullRequest
0 голосов
/ 21 декабря 2018

Мне нужно получить количество отчетов, составленных по id_type и по дням в одном наборе результатов.

Мой текущий запрос отображает общее количество отчетов для каждого типа, но не разделяет отчеты по дням какну.

SELECT DATE(report.date_insert) AS date_insert, type.name, count(report.id_type) as number_of_orders
from type
left join report
on (type.id_type = report.id_type)
group by type.id_type

Как видите, единственное различие между ними состоит в том, что я изменил значение для type.id_type = XX, но это не эффективный способ выполнить мое требование.

Другим важным требованием является то, что если в день, когда хотя бы у другого id_type есть отчеты, нет отчетов из id_type, то должен быть результат с нулевым счетом.

Я создал скрипку со структурой и некоторыми примерами данных, где id_type = 1 должен иметь 0 отчетов, id_type = 2 должен иметь 8 отчетов, а id_type = 3 должен иметь 5 отчетов.

http://sqlfiddle.com/#!9/6ceb48/2

Спасибо!

1 Ответ

0 голосов
/ 21 декабря 2018

Вам необходимо присоединиться к подзапросу, который получает все разные даты, а затем добавить дату в группу.

SELECT alldates.date_insert, type.name, IFNULL(COUNT(report.id_type), 0) AS number_of_orders
FROM (
    SELECT DISTINCT DATE(date_insert) AS date_insert
    FROM report) AS alldates
CROSS JOIN type
LEFT JOIN report ON type.id_type = report.id_type AND alldates.date_insert = DATE(report.date_insert)
GROUP BY alldates.date_insert, type.id_type
ORDER BY alldates.date_insert, type.name

DEMO

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