【问题标题】:SQL group by from multiple tablesSQL group by 来自多个表
【发布时间】:2020-11-02 22:22:28
【问题描述】:

我正在使用 SQL Workbench/J 并希望创建两列“web_sales”和“app_sales”(参见案例语句),将 sales2019 和 sales2020 表中的销售数据结合起来。但是,我当前的代码仍然显示特定项目/成员组合的 2 条记录,这取决于数据是否来自 2019 或 2020 表。如何将 2019 年和 2020 年的数据合并到一条记录中(请参阅所需的输出)?存在于子查询之外的 group by 语句无法完成此操作。

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

【问题讨论】:

    标签: sql group-by subquery union


    【解决方案1】:

    你可以做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
    

    【讨论】:

    • 我添加了 union all 并且仍然得到重复项目/成员组合的相同输出。
    • @markellefultz20 。 . .您没有对数据提供任何解释。但似乎id 是成员的ID。有些人会从一年到下一年更改他们的会员身份。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-28
    • 1970-01-01
    • 2021-09-26
    • 2013-04-06
    • 1970-01-01
    • 2011-10-21
    相关资源
    最近更新 更多