Как исправить запрос MySQL, чтобы найти все даты месяца, сопоставленные с общим количеством для каждой даты, включая нули? - PullRequest
0 голосов
/ 04 июля 2019

У меня есть таблица orders со столбцом Date временной метки.Я хочу считать количество размещенных заказов на каждую дату, включая нули для дат, когда не было размещено ни одного заказа, например:

TotalOrders --------- Дата

12 ------------------ 01/02/2019

0 ------------------- 02/02/2019

7 ------------------- 03/02/2019

0 ------------------- 04/02/2019

4 ------------------- 05/02/2019

0 ------------------- 06/02/2019

Я искал это здесь и получил одно решение:

выберите COUNT (o.OrderID) AS TotalOrders, a.date

из (выберите date_add ('2019-07-01',ИНТЕРВАЛ n5.num * 10000 + n4.num * 1000 + n3.num * 100 + n2.num * 10 + n1.num DAY) в качестве даты

из (выберите 0 в качестве num union all выберите 1 union allвыберите 2 объединение

все выберите 3 объединение все выберите 4 объединение все выберите 5 объединение все выберите 6 объединение все выберите 7 объединение все выберите 8 объединение все выберите 9) n1,

(выберите 0 как числосоюз все выбрать 1 союз все выбрать 2 союзвсе выберите 3 объединить все выберите 4 объединить все выберите 5 объедините все выберите 6 объедините все выберите 7 объедините все выберите 8 объедините все выберите 8 объедините все выберите 9) n2,

(выберите 0 как num объединение все выберите 1 объединение все выберите 2 объединениевсе выберите 3 объединить все выбрать 4 объединить все выбрать 5 объединить все выбрать 6 объединить все выбрать 7 объединить все выбрать 8 объединить все выбрать 9 объединить все выбрать 9) n3,

(выбрать 0 как num объединение всех выбрать 1 объединение всех выбрать 2 объединениевсе выберите 3 объединить все выберите 4 объединить все выберите 5 объединить все выберите 6
объедините все выберите 7 объедините все выберите 8 объедините все выберите 9) n4,

(выберите 0 как num объединение всех выберите 1 объедините всевыберите 2 объединить все выберите 3 объединить все выберите 4 объедините все выберите 5 объедините все выберите 6 объедините все выберите 7 объедините все выберите 8 объедините все выберите 8 объединить все выберите 9) n5

) a

LEFT JOINON MONTH (o.Date) = MONTH (a.date)

AND YEAR (o.Date) = YEAR (a.date) где MONTH (a.date) = '7' и

YEAR (a.date) = '2019' GROUP BY a.date упорядочить по a.date

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

заказов (OrderID (pk), дата, totalPrice, CustomerID)

1 Ответ

0 голосов
/ 04 июля 2019

В ваших выборочных данных нет примеров с июля 2019 года.

Я бы также предложил использовать диапазоны для сравнения where, поэтому для января 2019 года:

where a.date >= '2019-01-01' and a.date < '2019-02-01' 
...