MariaDB подсчет, присоединение и группировка по дате без внешнего ключа - PullRequest
1 голос
/ 21 июня 2020

возможно, кто-то уже сталкивался с тем же сценарием или проблемой, с которой сталкиваюсь я. Я искал повсюду, но не смог найти решения этой проблемы. У меня есть БД с именем machines с двумя таблицами: project и install. Таблицы выглядят ниже:

Project table
+---------------+---------------------+
| project       | date_imported       |
+---------------+---------------------+
| Failed Add    | 2020-06-15 07:28:51 |
| Failed Add    | 2020-06-15 07:28:51 |
| Failed Add    | 2020-06-15 07:28:51 |
| Failed Add    | 2020-06-15 07:28:51 |
| Failed Remove | 2020-06-15 07:34:39 |
| Failed Remove | 2020-06-15 07:34:39 |
| Failed Remove | 2020-06-15 07:34:39 |
| Failed Remove | 2020-06-15 07:34:39 |
| Failed Remove | 2020-06-15 07:34:39 |
| Failed Add    | 2020-06-16 01:22:16 |
| Failed Add    | 2020-06-16 01:22:16 |
| Failed Add    | 2020-06-16 01:22:16 |
| Failed Remove | 2020-06-16 13:17:32 |
| Failed Remove | 2020-06-16 13:17:32 |
+---------------+---------------------+
Install table
+---------------------+
| date_imported       |
+---------------------+
| 2020-06-15 07:15:57 |
| 2020-06-15 07:15:57 |
| 2020-06-15 17:42:48 |
| 2020-06-15 17:42:48 |
| 2020-06-15 17:42:48 |
| 2020-06-15 17:42:48 |
| 2020-06-16 03:02:32 |
| 2020-06-16 03:02:32 |
| 2020-06-16 12:27:57 |
+---------------------+

Я хотел бы подсчитать количество Add и Remove на основе дат из таблицы project, а затем присоединиться к таблице install, которая также имеет общее количество на дату.

Вот ожидаемый результат:

+------------+------------+--------------+------------+
| Dates      | Add        | Remove       | Install    |
+------------+------------+--------------+------------+
| 2020-06-15 |          4 |            5 |          6 |
| 2020-06-16 |          3 |            2 |          3 |
+------------+------------+--------------+------------+

Скажите, пожалуйста, как я могу получить этот результат.

1 Ответ

1 голос
/ 21 июня 2020

Агрегировать в каждой из двух таблиц по дате, а затем смоделировать полное внешнее объединение результатов:

with 
  cte_p as (
    select date(date_imported) date,
      sum(project = 'Failed Add') `Add`,
      sum(project = 'Failed Remove') `Remove`
    from Project  
    group by date  
  ),
  cte_i as (
    select date(date_imported) date, count(*) Install
    from Install
    group by date  
  )
select p.date Dates,
       p.`Add`, p.`Remove`, i.Install
from cte_p p left join cte_i i
on i.date = p.date
union 
select i.date Dates,
       p.`Add`, p.`Remove`, i.Install
from cte_i i left join cte_p p
on i.date = p.date

См. демонстрацию . Результатов:

> Dates      | Add | Remove | Install
> :--------- | --: | -----: | ------:
> 2020-06-15 |   4 |      5 |       6
> 2020-06-16 |   3 |      2 |       3
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...