SQL:时间维度和计算平均值
SQL: Time Dimension and Calculating Averages
虽然不完全相同,但我有一个 SQL Server 2008-R2 数据库模式,看起来很像这样...
我正在努力思考如何查询数据库以获得给定时间范围内的平均产品销售数量?
例如,2012 年至 2014 年间每种产品的平均每月销售额是多少。
我的主要问题是如何将零数字包含在平均值中,以考虑产品根本未售出的几个月。
感谢任何提示。
如果我很了解你的需求,你想知道包括2012年到2014年的平均销售产品数量,即销售产品数量除以36。
为了管理在此期间未售出的产品,关键是在 dim_product table 上进行右连接(或左连接):然后您将拥有每个产品至少一行(在这种情况下,units_sold 字段将为空)。请求应该是这样的(未经测试!)
SELECT product_name, units_sold FROM dim_product RIGHT JOIN fact_sales
ON dim_product.Id=Fact_sales.product_id WHERE date...;
然后,您可以调整它以在 units_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...;
以及文档 link:https://technet.microsoft.com/en-us/library/ms187518%28v=sql.105%29.aspx
虽然不完全相同,但我有一个 SQL Server 2008-R2 数据库模式,看起来很像这样...
我正在努力思考如何查询数据库以获得给定时间范围内的平均产品销售数量?
例如,2012 年至 2014 年间每种产品的平均每月销售额是多少。
我的主要问题是如何将零数字包含在平均值中,以考虑产品根本未售出的几个月。
感谢任何提示。
如果我很了解你的需求,你想知道包括2012年到2014年的平均销售产品数量,即销售产品数量除以36。
为了管理在此期间未售出的产品,关键是在 dim_product table 上进行右连接(或左连接):然后您将拥有每个产品至少一行(在这种情况下,units_sold 字段将为空)。请求应该是这样的(未经测试!)
SELECT product_name, units_sold FROM dim_product RIGHT JOIN fact_sales ON dim_product.Id=Fact_sales.product_id WHERE date...;
然后,您可以调整它以在 units_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...;
以及文档 link:https://technet.microsoft.com/en-us/library/ms187518%28v=sql.105%29.aspx