Abyste mohli vypočítat směrodatnou odchylku, musíte iterovat všechny prvky, takže by to nebylo možné udělat v jednom dotazu. Líný způsob by byl udělat to ve dvou průchodech:
DECLARE
@Avg int,
@StDev int
SELECT @Avg = AVG(Sales), @StDev = STDEV(Sales)
FROM tbl_sales
WHERE ...
SELECT AVG(Sales) AS AvgSales, MAX(Sales) AS MaxSales, MIN(Sales) AS MinSales
FROM tbl_sales
WHERE ...
AND Sales >= @Avg - @StDev * 3
AND Sales <= @Avg + @StDev * 3
Další jednoduchá možnost, která možná práce (v analýze vědeckých dat poměrně běžná) by spočívala ve snížení minima a maxima x hodnot, což funguje, pokud máte ke zpracování hodně dat. Můžete použít ROW_NUMBER
udělat to jedním příkazem:
WITH OrderedValues AS
(
SELECT
Sales,
ROW_NUMBER() OVER (ORDER BY Sales) AS RowNumAsc,
ROW_NUMBER() OVER (ORDER BY Sales DESC) AS RowNumDesc
)
SELECT ...
FROM tbl_sales
WHERE ...
AND Sales >
(
SELECT MAX(Sales)
FROM OrderedValues
WHERE RowNumAsc <= @ElementsToDiscard
)
AND Sales <
(
SELECT MIN(Sales)
FROM OrderedValues
WHERE RowNumDesc <= @ElementsToDiscard
)
Nahraďte ROW_NUMBER
s RANK
nebo DENSE_RANK
pokud chcete zahodit určitý počet unikátních hodnoty.
Kromě těchto jednoduchých triků se začnete dostávat do docela těžkých statistik. Musím se vypořádat s podobnými druhy ověřování a na příspěvek SO je to příliš mnoho materiálu. Existuje sto různých algoritmů, které můžete vyladit tuctem různých způsobů. Pokusil bych se, aby to bylo jednoduché, pokud je to možné!