#mysql #sql
#mysql #sql
Вопрос:
У меня есть таблица «Tcustomer»:
-------------- ---------- --------- ------------------ ---------------
| CustomerName | Product | Country | Submitted_apps | Finished_apps |
-------------- ---------- --------- ------------------ ---------------
| Customer 1 | book1 | CZ | 2020-11-06 | 2020-11-06 |
| Customer 2 | book1 | SK | 2020-11-06 | 2020-11-07 |
| Customer 3 | book2 | CZ | 2020-11-06 | null |
-------------- ---------- --------- ------------------ ---------------
Теперь мне нужно иметь один вывод, который сообщит мне, сколько submitted_apps было в каждый день, сколько finished_apps было в каждый день для продукта и страны.
Итак, на выходе получается что-то вроде этого:
---------- --------- ---------- ------------------ ---------------
| Product | Country | Date | Submitted_apps | Finished_apps |
---------- --------- ---------- ------------------ ---------------
| book1 | CZ |2020-11-06| 1 | 1 |
| book2 | CZ |2020-11-06| 1 | 0 |
| book1 | SK |2020-11-06| 1 | 0 |
| book1 | SK |2020-11-07| 0 | 1 |
---------- --------- ---------- ------------------ ---------------
Я сделал это, но суммирует только дату «submitted_apps». Если я добавлю также «finished_apps» в оператор GROUP BY, у меня там будет много строк с нулевыми значениями.
Мой SQL-код таков:
SELECT
COUNT (Submitted_apps) AS number_submitted_per_day,
COUNT (Finished_apps) AS number_finished_per_day,
Submitted_apps AS date
WHERE Submitted_apps > 2020-01-01
GROUP BY product, country, submitted_apps
Но этот SQL-запрос сообщает мне сейчас, сколько отправленных и завершенных заявок на книги было только на дату, указанную в «submitted_apps». Но мне нужно количество завершенных приложений до даты «Завершенные приложения» и количество отправленных приложений» до даты «Отправленные приложения».
Не могли бы вы мне помочь?
Ответ №1:
Вы можете отменить сборку данных, используя объединение всех, а затем агрегировать:
select Product, Country, date, sum(submitted) as num_submitted,
sum(finished) as num_finished
from ((select Product, Country, Submitted_apps as date, 1 as submitted, 0 as finished
from Tcustomer
) union all
(select Product, Country, finished_apps as date, 0 as submitted, 1 as finished
from Tcustomer
)
) c
group by Product, Country, date;