sql >> Database >  >> RDS >> Sqlserver

SQL:Toon gemiddelde en min/max binnen standaarddeviaties

Om de standaarddeviatie te berekenen, moet u alle elementen doorlopen, dus het zou onmogelijk zijn om dit in één query te doen. De luie manier zou zijn om het in twee stappen te doen:

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

Een andere eenvoudige optie die misschien werk (vrij gebruikelijk bij de analyse van wetenschappelijke gegevens) zou zijn om gewoon de minimale en maximale x te laten vallen waarden, wat werkt als u veel gegevens moet verwerken. U kunt ROW_NUMBER . gebruiken om dit in één verklaring te doen:

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
)

Vervang ROW_NUMBER met RANK of DENSE_RANK als je een bepaald aantal unieke wilt weggooien waarden.

Naast deze eenvoudige trucs begin je behoorlijk zware statistieken te krijgen. Ik heb te maken met soortgelijke soorten validatie en het is veel te veel materiaal voor een SO-post. Er zijn honderd verschillende algoritmen die je op tien verschillende manieren kunt aanpassen. Ik zou proberen het zo eenvoudig mogelijk te houden!



  1. Verbinding maken met de RDS-database vanuit node.js

  2. converteer python string date naar mysql datetime

  3. Nieuwe tabel maken in Laravel op basis van gebruikersinvoer?

  4. Hoe kan ik voorbereide verklaringen in CodeIgniter gebruiken?