首页 > 解决方案 > Redshift:我尝试使用 Union,但它返回 3 列而不是 4 列。我该怎么办?

问题描述

我必须找到在特定国家和特定日期(overall_streams)发生的流,然后对于相同的国家和日期,我必须找到特定产品的流。

换句话说,我试图将产品的表现与在这个地点和时间发生的流的总数进行比较。

出于这个原因,我尝试使用 UNION(我所做的子查询不会给出正确的结果)。

这是我的简化代码:

Select age_group, gender, sum(streams) as product_streams
From t1 
Where product='A' 
And country= 'US'
And date= '1st week of July'
Group by 1,2

Union

Select age_group, gender, sum(streams) as overall_streams
From t1
Where country='US'
And date='1st week of July'
Group by 1,2

请注意,第二个查询的不同之处在于我没有指定产品。

我得到的结果是 3 列。第三列名为“product_streams”,它在product_streams 和overall_streams 之间交替。

例子:

0-18  f   100
0-18  f   560
0-18  m   45
0-18  m   398

结果是正确的,我只想有 4 列而不是 3 列。像这样:

age_group    gender    product_streams    overall_streams

有任何想法吗?

标签: sqlsubqueryamazon-redshiftunion

解决方案


我认为你想要条件聚合:

Select age_group, gender,
       sum(streams) as overall_streams
       sum(case when product = 'A' then streams else 0 end) as product_streams
From t1 
Where country = 'US' and
      date = '1st week of July'
group by age_group, gender;

推荐阅读