如何在SQL Server 2017 Express中使用STDEV over()?

时间:2019-05-08 03:15:33

标签: sql-server-express stdev

我正在尝试获取MCW_NM列的STDEV,但我希望它成为BLADEID每个组中所有行的STDEV。但是在Variance_Blade_MCW中,我需要将其按BLADEID分组。我已经尝试过over(),但出现此错误:

  

在选择列表中,列'ENG.DBO.MCW_BCL_WEDGE.MCW_NM'无效,因为该列未包含在聚合函数或GROUP BY子句中。

有人可以帮助我吗?以下是我的查询。

PS :我在解释问题时遇到困难,请耐心等待。让我知道您是否有疑问!非常感谢!

SELECT 
    BladeID,
    Total_Sigma_MCW = STDEV(MCW_NM) OVER (), 
    CountD_Blade = COUNT(BLADEID) OVER (), 
    Variance_Blade_MCW = SQUARE(STDEV(MCW_NM))
FROM 
    ENG.DBO.MCW_BCL_WEDGE 
WHERE 
    TESTDATE > GETDATE() - 6
GROUP BY 
    BLADEID 
HAVING
    COUNT(BladeID) >= 5000

1 个答案:

答案 0 :(得分:0)

我目前无法访问mssql,但这可能有用。内部查询为每个BladeID返回1行,我认为是您想要的集合。问题在于,窗口函数总是为源代码中的每一行返回1行,因此外部查询将其扁平化。

SELECT DISTINCT
    BladeID,
    Total_Sigma_MCW = STDEV(MCW_NM) OVER (PARTITION BY 1),
    Variance_Blade_MCW, 
    CountD_Blade,
FROM
(
SELECT 
    BladeID,
    MCW_NM, 
    CountD_Blade = COUNT() OVER (PARTITION BY BladeID), 
    Variance_Blade_MCW = SQUARE(STDEV(MCW_NM) OVER (PARTITION BY BLADEID))
FROM 
    ENG.DBO.MCW_BCL_WEDGE 
WHERE 
    TESTDATE > GETDATE() - 6
) q
WHERE CountD_Blade >= 5000

创建两个查询可能更有效,一个查询按BladeID分组,另一个查询整个数据集并将其联接。