Lấy trung bình ba cột trên mỗi hàng trong SQL


7

Các AVG()chức năng trong SQL làm việc dữ liệu cột cụ thể. Nhưng ở đây, chúng tôi muốn tính trung bình của ba cột như vậy cho mỗi hàng. Trong toán học, chúng ta sẽ làm

AVG=(col1 + col2 + col3)/3

Tương tự: có bất kỳ truy vấn để tính toán AVG(col1, col2, col3...)?

Câu trả lời:


9

Nếu các cột không thể rỗng thì chỉ cần sử dụng

(col1 + col2 + col3)/3

sẽ hoạt động tốt (mặc dù trên một số RDBMS, bạn có thể cần phải có tử số hoặc số chia không nguyên để tránh phân chia số nguyên).

Đối với các cột không thể, bạn có thể muốn sử dụng một cái gì đó như

SELECT CASE
         WHEN COALESCE(col1, col2, col3) IS NOT NULL THEN 
         ( COALESCE(col1, 0) + COALESCE(col2, 0) + COALESCE(col3, 0) ) / 
            (CASE WHEN col1 IS NULL THEN 0 ELSE 1 END + 
             CASE WHEN col2 IS NULL THEN 0 ELSE 1 END + 
             CASE WHEN col3 IS NULL THEN 0 ELSE 1 END)
       END

Trên SQL Server, bạn cũng có thể sử dụng

SELECT *,
       (SELECT AVG(Col)
        FROM   (VALUES(Col1),
                      (Col2),
                      (Col3)) V(Col)) AS col_average
FROM   YourTable
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.