ГРУППИРОВАТЬ по различным условиям для каждого столбца

#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;