如何根据计算结果过滤行

Joe*_*oel 1 sql t-sql sql-server

以下代码创建了一个新列"ZScore"

SELECT [Cardholder Name], [Debit Amount], ([Debit Amount] - AVG([Debit Amount]) OVER ()) / (STDEV([Debit Amount]) OVER ()) as [ZScore]
FROM ['Card Data']
ORDER BY [ZScore] DESC;
Run Code Online (Sandbox Code Playgroud)

我想要做的只是显示ZScore> = 3的行.我尝试了以下但是一切似乎都抛出错误.

SELECT [Cardholder Name], [Debit Amount], ([Debit Amount] - AVG([Debit Amount]) OVER ()) / (STDEV([Debit Amount]) OVER ()) as [ZScore]
FROM ['PCard Output']
HAVING (([Debit Amount] - AVG([Debit Amount]) OVER ()) / (STDEV([Debit Amount]) OVER ())) > 3
ORDER BY [ZScore] DESC;
Run Code Online (Sandbox Code Playgroud)

仅显示计算出的z得分> = 3的行的正确方法是什么?

Gor*_*off 5

只需使用子查询:

SELECT cd.*
FROM (SELECT [Cardholder Name], [Debit Amount], ([Debit Amount] - AVG([Debit Amount]) OVER ()) / (STDEV([Debit Amount]) OVER ()) as [ZScore]
      FROM ['Card Data']
     ) cd
WHERE ZScore > 3
ORDER BY [ZScore] DESC;
Run Code Online (Sandbox Code Playgroud)