sql >> Databáze >  >> RDS >> Sqlserver

SQL:Zobrazit průměr a min/max v rámci standardních odchylek

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é!



  1. PHP:Jak zobrazit proměnnou (a) v jiné proměnné (b), když proměnná (b) obsahuje text

  2. Řešení problémů generátoru číselných řad – 2. část

  3. vložit kombinovat (hodnota a výběr)

  4. Proč T-SQL ISNULL() zkracuje řetězec a COALESCE ne?