Таким образом, вы получаете приблизительную / среднюю / поддельную цену за единицу, взяв среднее
WITH data_table AS (
SELECT * FROM VALUES
(1,'2020-01-27',517.66,'Rocking Chair'),
(1,'2020-01-27',517.66,'Plush Animal'),
(1,'2020-01-27',517.66,'Rug'),
(1,'2020-01-27',517.66,'Couch'),
(1,'2020-01-27',517.66,'Bar Stool'),
(2,'2020-01-28',59.09,'Painting'),
(2,'2020-01-28',59.09,'Rug')
v(trans_unique_key, fiscal_dt, sale_amt, prdct_desc)
)
SELECT a.*
,sum(fake_item_cost_2dp)over(partition by trans_unique_key) AS sum_of_parts_not_eqaul_the_whole
FROM (
SELECT *
,SALE_AMT/count(*)over(partition by trans_unique_key) as FAKE_ITEM_COST
,round(FAKE_ITEM_COST,2) AS fake_item_cost_2dp
FROM data_table
) AS a
ORDER BY 2,1;
, что дает:
TRANS_UNIQUE_KEY FISCAL_DT SALE_AMT PRDCT_DESC FAKE_ITEM_COST FAKE_ITEM_COST_2DP SUM_OF_PARTS_NOT_EQAUL_THE_WHOLE
1 2020-01-27 517.66 Rocking Chair 103.53200000 103.53 517.65
1 2020-01-27 517.66 Plush Animal 103.53200000 103.53 517.65
1 2020-01-27 517.66 Rug 103.53200000 103.53 517.65
1 2020-01-27 517.66 Couch 103.53200000 103.53 517.65
1 2020-01-27 517.66 Bar Stool 103.53200000 103.53 517.65
2 2020-01-28 59.09 Painting 29.54500000 29.55 59.10
2 2020-01-28 59.09 Rug 29.54500000 29.55 59.10
, что обычно считается плохим для округления и сумма, или среднее значение, и снова сумма, и / или числа с плавающей запятой не являются стабильными.
Но один из моих главных моментов в том, что fake_per_item_price не имеет особого смысла, если только вы не собираетесь агрегировать обратно до снова на уровне транзакции, и в этот момент будет просто иметь смысл ANY_VALUE
.
WITH data_table AS (
SELECT * FROM VALUES
(1,'2020-01-27',517.66,'Rocking Chair'),
(1,'2020-01-27',517.66,'Plush Animal'),
(1,'2020-01-27',517.66,'Rug'),
(1,'2020-01-27',517.66,'Couch'),
(1,'2020-01-27',517.66,'Bar Stool'),
(2,'2020-01-28',59.09,'Painting'),
(2,'2020-01-28',59.09,'Rug')
v(trans_unique_key, fiscal_dt, sale_amt, prdct_desc)
)
SELECT trans_unique_key, fiscal_dt, ANY_VALUE(sale_amt) as sale_amt, count(*) as total_items_count, count(distinct prdct_desc) as distinct_items_count
FROM data_table
GROUP BY 1,2
ORDER BY 2,1;
, дающий:
TRANS_UNIQUE_KEY FISCAL_DT SALE_AMT TOTAL_ITEMS_COUNT DISTINCT_ITEMS_COUNT
1 2020-01-27 517.66 5 5
2 2020-01-28 59.09 2 2