Как вычислить агрегацию с помощью функции 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
в новую таблицу, а затем присоедините ее к вашему каталогу продуктов, который содержит цены - в итоговой таблице будут указаны цены для расчета средних продажных цен.