我对以下问题使用REDSHIFT。我在下面的示例中寻找交叉连接的替代方法。
在我的用例中,交叉连接对于少量的列可以很好地工作,但是当“ fruit_combinations”中的行数增加时,交叉连接将变得昂贵。
实际使用案例中,交叉连接的处理成本越来越高:
我正在寻找一种限制行数的替代方法,但仍然可以高效地执行“全部”聚合或任何其他解决方案。
我有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