SQL:时间维度和计算平均值

时间:2015-03-10 14:57:06

标签: sql sql-server average dimensional-modeling

虽然不完全相同,但我有一个SQL Server 2008-R2数据库架构,看起来很像...... enter image description here

我很难理解如何查询数据库以获得超过给定时间范围内的平均产品销售数量?

例如,2012年至2014年期间每种产品的平均每月销售额是多少。

我的主要问题是如何在平均值中包含零数字,以便将产品根本没有出售的几个月考虑在内。

任何提示都表示赞赏。

1 个答案:

答案 0 :(得分:0)

如果我了解您的需求,您想了解2012年至2014年间平均销售的产品数量,即销售产品数量除以36个。

为了管理在此期间尚未销售的产品,关键是在dim_product表上进行正确的加入(或左侧):每个产品至少有一行(在这种情况下, units_sold字段将为null)。请求应该是这样的(未经测试!)

  

SELECT product_name,units_sold FROM dim_product RIGHT JOIN fact_sales   ON dim_product.Id = Fact_sales.product_id WHERE date ...;

然后,你可以调整它以使unit_sold上的总和(如果没有,你将为零),并除以月数。

看起来应该是这样的(比前一个更加未经测试):

  

SELECT product_name,SUM(units_sold)/ 36 as average_per_month FROM dim_product RIGHT JOIN   fact_sales ON dim_product.Id = Fact_sales.product_id WHERE date ...;

文档链接:https://technet.microsoft.com/en-us/library/ms187518%28v=sql.105%29.aspx