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

Posted

技术标签:

【中文标题】SQL:时间维度和计算平均值【英文标题】:SQL: Time Dimension and Calculating Averages 【发布时间】:2015-03-10 14:57:06 【问题描述】:

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

我正在努力弄清楚如何查询数据库以获取给定时间范围内产品的平均销售数量?

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

我的主要问题是如何在平均数月内包含零数字,以将产品根本没有售出的月份计算在内。

任何提示表示赞赏。

【问题讨论】:

你是指日均销售额吗? 提示:平均值只是总和除以计数。 提示:查看 GroupBy ... 拥有:msdn.microsoft.com/en-us/library/ms177673.aspx 【参考方案1】:

如果我很了解您的需求,您想知道包括 2012 年至 2014 年期间售出的平均产品数量,即售出的产品数量除以 36。

为了管理在此期间未售出的产品,关键是在 dim_product 表上进行右连接(或左连接):然后每个产品至少有一行(在这种情况下, 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...;

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

【讨论】:

以上是关于SQL:时间维度和计算平均值的主要内容,如果未能解决你的问题,请参考以下文章

SQL计算均值遇到NULL

SQL计算均值遇到NULL

在多个维度上平均 numpy 掩码数组

如何从 sql 中的 2 个表中按组聚合和计算平均值?

sql计算平均值与group by?

如何使用 sql 中的每 n 行(例如第 24、48 和 72 行)计算移动平均值?