如何使用Aster Basket_Generator函数计算聚合

时间:2013-07-23 18:35:41

标签: sql teradata teradata-aster sql-mr

我正在使用Aster Basket_Generator功能从购买表(retail_purchases)计算一个篮子。我可以使用以下代码创建购物篮:

SELECT order_number, gsi_sku1, gsi_sku2, Count(1) 
FROM basket_generator(
    ON retail_purchases 
    PARTITION BY order_number 
    BASKET_SIZE(2) 
    BASKET_ITEM('gsi_sku')
    ACCUMULATE('order_number')
) 
WHERE gsi_sku1 in (11001788, 12002389) 
GROUP BY 1, 2, 3; 
LIMIT 10;

我还想做的是计算每个篮子的平均值。理想情况下,这将作为一栏返回给我,但我对篮子中每件商品的平均销售价格完全满意。

我尝试了以下内容:

SELECT order_number, gsi_sku1, gsi_sku2, avg(sales_amt), Count(1) 
FROM basket_generator(
    ON retail_purchases 
    PARTITION BY order_number 
    BASKET_SIZE(2) 
    BASKET_ITEM('gsi_sku')
    ACCUMULATE('order_number', 'sales_amt')
) 
WHERE gsi_sku1 in (11001788, 12002389) 
GROUP BY 1, 2, 3; 
LIMIT 10;

但avg(sales_amt)列似乎没有返回正确的值。使用Aster Basket_Generator分析函数时,推荐的计算篮子聚合的方法是什么?

1 个答案:

答案 0 :(得分:0)

来自basket_generator上的Aster文档:

  

ACCUMULATE子句中的列应该是列中的列的子集   PARTITION BY子句。否则,确定性属性不是   保证。

因此,您的方法并不成立,因为 sales_amt 不属于 PARTION BY (并且因为价格会发生变化)。

一种选择是将basket_generator的结果放入新表中,然后将其加入包含价格的产品目录中 - 结果表将包含计算平均销售价格的价格。