Как вычислить агрегацию с помощью функции Aster Basket_Generator

Я использую функцию 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 ответ

Из документации Астры по basket_generator:

Столбцы в предложении ACCUMULATE должны быть подмножеством столбцов в предложении PARTITION BY. В противном случае детерминированное свойство не гарантируется.

Таким образом, ваш подход не выполняется, так как sales_amt не является частью PARTION BY (и это правильно, так как цены меняются).

Одним из вариантов является размещение результатов basket_generator в новую таблицу, а затем присоедините ее к вашему каталогу продуктов, который содержит цены - в итоговой таблице будут указаны цены для расчета средних продажных цен.

Другие вопросы по тегам