1

我正在尝试获取 MCW_NM 列的 STDEV,但我希望它是所有行的 STDEV,而不是每个组的 BLADEID。但在 Variance_Blade_MCW 中,我需要将其按 BLADEID 分组。我已经尝试过(),但我得到了这个错误:

列 '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
4

1 回答 1

1

我目前无权访问 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 分组,一个在整个数据集上并加入它们。

于 2019-05-08T23:23:25.360 回答