Joh*_*ohn 9 sql-server aggregate functions
我正在寻找一个 SQL Server 函数,它可以让我取平均值,不包括异常值。基本上是这样的:
1, 2, 1, 2, 7
平均为 1.5。
我将在财务分析 Microsoft SQL 脚本中实现这一点。
我的查询太长太复杂,不适合在这里,而且我不想公开发布。AVG看起来它本身没有排除异常值的选项,尽管它确实包含PARTITION BY.
Mar*_*son 13
一个非常简单的例子是,以获得AVG和STDEV号码的范围,然后排除任何更不是从平均1个标准差。
然后取新范围的平均值。
这是一段相当基本的代码(不要忘记CASTto a DECIMAL),您可以对其进行扩展以使其更适合您的需要。
CREATE TABLE #nums (num INT);
INSERT INTO #nums VALUES (1), (2), (1), (2), (7);
WITH AvgStd AS (
SELECT
AVG(num) AS avgnum,
STDEVP(num) AS stdnum
FROM #nums AS n
)
SELECT
AVG(CAST(num AS DECIMAL(5,2)))
FROM #nums AS n
CROSS JOIN AvgStd
WHERE num < (avgnum + stdnum)
AND num > (avgnum - stdnum);
DROP TABLE #nums;
Run Code Online (Sandbox Code Playgroud)