Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

SQL:Hiển thị trung bình và tối thiểu / tối đa trong độ lệch chuẩn

Để tính toán độ lệch chuẩn, bạn cần phải lặp qua tất cả các phần tử, vì vậy sẽ không thể thực hiện điều này trong một truy vấn. Cách lười biếng sẽ là chỉ làm trong hai lần:

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

Một tùy chọn đơn giản khác có thể công việc (khá phổ biến trong phân tích dữ liệu khoa học) sẽ chỉ giảm mức tối thiểu và tối đa x giá trị này hoạt động nếu bạn có nhiều dữ liệu cần xử lý. Bạn có thể sử dụng ROW_NUMBER để thực hiện điều này trong một tuyên bố:

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
)

Thay thế ROW_NUMBER với RANK hoặc DENSE_RANK nếu bạn muốn loại bỏ một số duy nhất giá trị.

Ngoài những thủ thuật đơn giản này, bạn bắt đầu nhận được một số thống kê khá nặng. Tôi phải đối phó với các loại xác nhận tương tự và nó quá nhiều tài liệu cho một bài đăng SO. Có hàng trăm thuật toán khác nhau mà bạn có thể điều chỉnh theo hàng chục cách khác nhau. Tôi sẽ cố gắng giữ cho nó đơn giản nếu có thể!



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cài đặt nào cung cấp định dạng ngày giờ mặc định của SQL Server?

  2. Tạo bảng SQL dựa trên Datatable C #

  3. Chỉ nhận Tháng và Năm từ SQL DATE

  4. CAST và IsNumeric

  5. SQL:Last_Value () trả về kết quả sai (nhưng First_Value () hoạt động tốt)