SQL группировка из нескольких таблиц - PullRequest
0 голосов
/ 13 июля 2020

Я использую SQL Workbench / J и хочу создать два столбца «web_sales» и «app_sales» (см. Операторы case), объединяющие данные о продажах из таблиц sales2019 и sales2020. Однако в моем текущем коде по-прежнему отображаются 2 записи для определенной комбинации элемент / член c в зависимости от того, поступают ли данные из таблицы 2019 или 2020. Как я могу объединить данные за 2019 и 2020 годы в одну запись (см. Желаемый результат)? Оператор group by, существующий вне подзапроса, не выполняет sh этого.

select *
from (
    select id
      ,item
      ,member
      ,SUM(CASE WHEN platform = 'web' THEN revenue ELSE 0 END) AS web_sales
      ,SUM(CASE WHEN platform = 'app' THEN revenue ELSE 0 END) AS app_sales
    from sales2019
    group by id, item, member
    union
    select id
      ,item
      ,member
      ,SUM(CASE WHEN platform = 'web' THEN revenue ELSE 0 END) AS web_sales
      ,SUM(CASE WHEN platform = 'app' THEN revenue ELSE 0 END) AS app_sales
    from sales2020
    group by id, item, member) A
group by A.id, A.item, A.member 
order by A.item asc;

Текущий вывод:

id  item    member  web_sales   app_sales
2   desk-blue   y   132.5   374.6
2   desk-blue   n   348.9   2597.9
2   desk-blue   y   753.1   2209.9
2   desk-blue   n   23.3    234.9
3   desk-brown  y   245.4   271.2
3   desk-brown  n   192.4   5295.8
3   desk-brown  n   1.6     776.5

Желаемый результат:

id  item    member  web_sales   app_sales
2   desk-blue   y   885.6   2584.5
2   desk-blue   n   372.2   2832.8
3   desk-brown  y   245.4   271.2
3   desk-brown  n   194.0   6072.3

1 Ответ

1 голос
/ 13 июля 2020

Вы можете выполнить union all перед агрегированием:

select id, item, member,
       SUM(CASE WHEN platform = 'web' THEN revenue ELSE 0 END) AS web_sales,
       SUM(CASE WHEN platform = 'app' THEN revenue ELSE 0 END) AS app_sales
from ((select id, item, member, platform, revenue
       from sales2019
      ) union all
      (select id, item, member, platform, revenue
       from sales2020
      ) 
     ) s
group by id, item, member
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...