交叉连接的替代

时间:2019-05-20 19:37:38

标签: sql amazon-redshift cross-join

我对以下问题使用REDSHIFT。我在下面的示例中寻找交叉连接的替代方法。

在我的用例中,交叉连接对于少量的列可以很好地工作,但是当“ fruit_combinations”中的行数增加时,交叉连接将变得昂贵。

实际使用案例中,交叉连接的处理成本越来越高:

  • 表1-256种组合
  • 表2-6亿行

我正在寻找一种限制行数的替代方法,但仍然可以高效地执行“全部”聚合或任何其他解决方案。

我有2个表,表1(fruit_combinations)包含有关表2(fruit_basket)应如何分组和汇总的列的组合:

表1包含列组合:

FRUIT_COMBINATIONS

  BANANA  ORANGE
  banana  'ALL'  
  banana  orange

包含水果篮的表2:

FRUIT_BASKET

BANANA ORANGE USER_COUNT 
  b1     o1      5
  b1     o2      10

查询:

select  case when tt.BANANA = 'ALL' then 'All BANANAs' ELSE stg.BANANA end as comb_BANANA
       ,case when tt.ORANGE = 'ALL' then 'All ORANGEs' ELSE stg.ORANGE end as ORANGE
       ,SUM(STG.USER_COUNT)  AS USER_COUNT
FROM FRUIT_BASKET STG
cross join FRUIT_COMBINATIONS tt 
group by 1,2

结果集:

FRUIT_BASKET_AGG

BANANA   ORANGE    USER_COUNT 
  b1     'ALL'       15
  b1      o1         5
  b1      o2         10

0 个答案:

没有答案
相关问题