Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

SQL:Pokaż średnią i min/maks. w ramach odchyleń standardowych

Aby obliczyć odchylenie standardowe, musisz przejść przez wszystkie elementy, więc nie byłoby to możliwe w jednym zapytaniu. Leniwym sposobem byłoby zrobienie tego w dwóch przejazdach:

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

Kolejna prosta opcja, która może pracy (dość powszechnej w analizie danych naukowych) byłoby po prostu odrzucenie minimum i maksimum x wartości, co działa, jeśli masz dużo danych do przetworzenia. Możesz użyć ROW_NUMBER zrobić to w jednym oświadczeniu:

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
)

Zastąp ROW_NUMBER z RANK lub DENSE_RANK jeśli chcesz odrzucić określoną liczbę unikalnych wartości.

Poza tymi prostymi sztuczkami zaczynasz mieć dość ciężkie statystyki. Mam do czynienia z podobnymi rodzajami walidacji i jest to zdecydowanie za dużo materiału na post SO. Istnieje sto różnych algorytmów, które możesz modyfikować na kilkanaście różnych sposobów. Jeśli to możliwe, staram się zachować prostotę!



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. ModuleNotFoundError:Brak modułu o nazwie „pyodbc” podczas importowania pyodbc do skryptu py

  2. Jak naprawić błąd „Dostawca nazwanych potoków, błąd 40 — nie można otworzyć połączenia z serwerem SQL Server”?

  3. Pobieranie wieloetapowej operacji generowało błędy. Sprawdź każdą wartość statusu. błąd podczas używania ADO z serwerem SQL 2008

  4. Jak wywołać procedurę składowaną wewnątrz procedury składowanej?

  5. Błąd przepełnienia arytmetycznego podczas konwersji wyrażenia na typ danych datetime