Я использую этот запрос, чтобы вернуть распределение поля поплавка вокруг его средний:Как выполнить арифметические операции над полями данных и агрегатными функциями в where where?
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 дает мне две ошибок:
Колонок «Results.Result» недопустим в HAVING предложения, потому что это не содержится ни в агрегатной функции, ни в предложении GROUP BY.
Оконные функции могут отображаться только в предложениях SELECT или ORDER BY.
Как я могу достичь того, что я ищу? Google не очень добр ко мне сегодня :-(