包含事实表中的平均值
答
采取以下事实表设计:
date_id, quantity_sold, amount_sold, avg_price
其中avg_price被定义为AMOUNT_SOLD/quantity_sold,这是跨越每个产品的平均价格。
现在,想象一下这样的场景:
- 在日期1你卖1个单位产品1与价格在100和99个的价格1单位产品2的;在日期2
- 你卖10个单位的产品1,没有产品的2
你得到如下表:
date_id, quantity_sold, amount_sold, avg_price
1, 100, 199, 1.99
1, 10, 1000, 100
有没有你所能聚集avg_price给你的方式有意义的事。 Avg(100,1.99)不是两天内的平均价格;没有办法将这两个数字相加并得到实际的平均价格。
得到一个实际avg_price出这一事实表的唯一方法是通过取得两个主要元件的总和与它们划分,
sum(amount_sold)/sum(quantity_sold),
返回一百十分之一千一百九十九= 10.9。
因此,该事实表上的平均值是无意义的数字。
用一种不同的方式:除了您还知道每个子集的大小,不可能将集合上的平均值表示为不同子集之间的平均值的函数。