MYSQL возвращает ноль в дате, которой нет, и СЧИТАЙТЕ, сколько строк присутствует с указанной c датой - PullRequest
1 голос
/ 10 марта 2020

У меня есть таблица с именем calendar с одним столбцом (mydate DATE).

MYDATE
2020-01-01
2020-01-02
2020-01-03

...

У меня также есть таблица с именем delivery с тремя столбцами (id PK, giorno DATE, суммарный FLOAT)

ID    GIORNO          TOTALE
1     2020-01-01      0.10
2     2020-01-01      5
3     2020-01-02      12
4     2020-01-12      5
5     2020-02-02      13.50

Вот что я пытаюсь получить:

Day            Numbers of orders
2020-01-01     2
2020-01-02     1
2020-01-03     0
2020-01-04     0
2020-01-05     0
2020-01-06     0
2020-01-07     0
2020-01-08     0
2020-01-09     0
2020-01-10     0
2020-01-11     0
2020-01-12     1

...

Я пытался выполнить этот запрос:

SELECT c.mydate, IFNULL(d.totale, 0) value 
FROM delivery d
RIGHT JOIN calendar c
    ON ( c.mydate = d.giorno )
GROUP BY c.mydate 
ORDER BY c.mydate 

1 Ответ

2 голосов
/ 10 марта 2020

Рассмотрим:

select c.mydate, count(d.id) number_of_orders
from calendar c
left join delivery d on d.giorno = c.mydate
group by c.mydate

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

Это довольно близко к вашему исходному запросу (хотя здесь используется left join вместо right join), однако для подсчета заказов используется функция агрегирования.

...