Подсчет заказов за несколько периодов времени - PullRequest
1 голос
/ 08 мая 2020

У меня есть такая база данных (стандартизованная, упрощенная для описания проблемы):

BOOKS:
ID (PK) | TITLE | AUTHOR | ...
--------|-------|--------|-----
 0 | Title_1 | Author_1 
 1 | Title_2 | Author_1
 2 | Title_3 | Author_2
 3 | Title_3 | Author_3

ORDERs:
ID | BOOK_ID | USER_ID | ORDER_DATE | ...
---|---------|---------|------------|----
 0 | 1 | 1 | 2020-04-10 |
 1 | 2 | 2 | 2020-04-15 |
 2 | 2 | 1 | 2020-04-26 |
 3 | 2 | 1 | 2020-05-02 | 

Я хочу добиться чего-то вроде этого

RESULT:
BOOK | Num_All_Time_Orders | Num_Orders_April | Num_Orders_May

Как и просили: https://www.db-fiddle.com/f/e1gW7aVEh3Gh547nZHvaDA/0

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

Возможно ли это (простым способом) или мне следует выполнять последующие запросы с другими параметрами?

Текущий запрос для NumAllTime выглядит примерно так:

SELECT BOOK.ID , COUNT(ORDERS.BOOK_ID)
FROM BOOKS AS BOOK
LEFT JOIN ORDERS ON BOOK.ID = ORDERS.BOOK_ID
GROUP BY BOOK.ID

EDIT: Спасибо за немедленные комментарии. Отредактировал кое-что.

1 Ответ

2 голосов
/ 08 мая 2020

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

SELECT b.ID,
       COUNT(o.ID) AS All_Orders,
       COUNT(CASE WHEN EXTRACT(YEAR_MONTH FROM o.ORDER_DATE) = EXTRACT(YEAR_MONTH FROM CURDATE()) THEN 1 END) AS This_Month_Orders,
       COUNT(CASE WHEN EXTRACT(YEAR_MONTH FROM o.ORDER_DATE) = EXTRACT(YEAR_MONTH FROM CURDATE() - INTERVAL 1 MONTH) THEN 1 END) AS Last_Month_Orders
FROM BOOKS b
JOIN ORDERS o ON o.BOOK_ID = b.ID
GROUP BY b.ID

Вывод:

ID  All_Orders  This_Month_Orders   Last_Month_Orders
1   1           0                   1
2   3           1                   2

Демо на dbfiddle

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