【问题标题】:SQL - Determining Standard Deviation of Count of Monthly SalesSQL - 确定每月销售计数的标准偏差
【发布时间】:2018-05-13 08:57:14
【问题描述】:

我有一张包含销售数据的表格,我正在尝试确定每月销售数量的标准差。但是,我不断收到错误:(

这是我目前的查询:

SELECT O.Id,
STDEV(COUNT(*)) OVER (ORDER BY YEAR(O.CreateDate), MONTH(O.CreateDate)) AS StdDeviation
FROM Orders O

我认为第二行最需要帮助。当我编译代码时出现错误:

'order' 附近的语法不正确。

有什么想法吗? 我正在使用 SQL Server Management Studio v17.2

这是我要计算的示例。

示例

ID #7 might have 1 sale in January, 2 sales in February, 4 sales in March, etc.

我想分别找出每个 ID 的 {1,2,4} 的标准差。

样本预期输出:

Part Number  , Standard Deviation

1 , .86

2,  .83

等等

【问题讨论】:

  • 请标记正在使用的 dbms。
  • 我正在使用 SQL Server Management Studio v17.2。这就是你要问的吗?抱歉,我对 SQL 还很陌生。
  • 请同时提供示例预期输出
  • 刚刚添加了一些!仍然坚持这个,所以任何帮助表示赞赏!

标签: sql sql-server


【解决方案1】:

首先计算每个月的计数,然后使用该计数计算stdev,试试这个:

SELECT a.id, 
       Stdev(a.cnt) AS StdDeviation 
FROM   (SELECT O.id, 
               Year(O.createdate)  AS y, 
               Month(O.createdate) AS m, 
               Count(*)            AS cnt 
        FROM   orders o 
        GROUP  BY id, 
                  Year(O.createdate), 
                  Month(O.createdate)) a 
GROUP  BY id 

完整脚本

CREATE TABLE #temp (
  orderid int IDENTITY,
  CreateDate datetime,
  partid int

)


INSERT INTO #temp (CreateDate, partid)
  VALUES ('1/1/2017', 7),
  ('2/1/2017', 7),
  ('2/15/2017', 7),
  ('3/1/2017', 7),
  ('3/7/2017', 7),
  ('3/15/2017', 7),
  ('3/30/2017', 7),
  ('1/1/2017', 8),
  ('2/1/2017', 8),
  ('3/1/2017', 8),
  ('3/7/2017', 8),
  ('3/15/2017', 8)



SELECT
  a.partid,
  STDEV(a.cnt) AS StdDeviation
FROM (SELECT
  partid,
  YEAR(O.CreateDate) AS y,
  MONTH(O.CreateDate) AS m,
  COUNT(*) AS cnt
FROM #temp o
GROUP BY partid,
         YEAR(O.CreateDate),
         MONTH(O.CreateDate)) a
GROUP BY partid

DROP TABLE #temp

【讨论】:

    【解决方案2】:

    我认为你的目标是这样的:

    SELECT YEAR(O.CreateDate), MONTH(O.CreateDate),
           STDEV(COUNT(*)) OVER () AS StdDeviation
    FROM Orders O
    GROUP BY YEAR(O.CreateDate), MONTH(O.CreateDate);
    

    如果您在OVER 子句中包含ORDER BY,您将获得“累积”标准差。

    【讨论】:

    • 这确实运行没有错误 - 所以我们正朝着正确的方向前进!!非常感谢您的帮助。但这并不是我所希望的。我想要的是两列——ID(由 O.ID 给出)和月销售额的标准差。例如,零件 ID #15 可能在 1 月份有 2 次销售,在 2 月份有 3 次销售,以此类推。我想取月销售额的标准差。
    猜你喜欢
    • 1970-01-01
    • 2021-10-16
    • 1970-01-01
    • 1970-01-01
    • 2015-10-11
    • 1970-01-01
    • 2018-11-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多