我正在使用此查询来返回浮点字段在其平均值附近的分布:
SELECT COUNT(*) AS [Count], Result FROM (
SELECT ROUND(Result - AVG(Result) OVER(), 1) Result FROM Results)
GROUP BY Result
此查询返回所有记录之间的距离和平均值。现在,我需要过滤超出 ±3SD 范围的记录。我想也许我可以通过将查询更改为此轻松实现这一点:
SELECT COUNT(*) AS [Count], Result FROM (
SELECT ROUND(Result - AVG(Result) OVER(), 1) Result FROM Results
HAVING Abs(Result - AVG(Result)) OVER() < 3 * STDEV(Result) OVER())
GROUP BY Result
但是 SQL Server 给了我两个错误:
HAVING 子句中的“Results.Result”列无效,因为它既不包含在聚合函数中,也不包含在 GROUP BY 子句中。
窗口函数只能出现在 SELECT 或 ORDER BY 子句中。
我怎样才能实现我正在寻找的东西?Google 今天对我不友好 :-(