Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MySQL

Tính trung bình cột trong MySQL với hàm tổng hợp (ví dụ có trọng số)


Giới thiệu

Bài viết demo tính giá trị trung bình có trọng số (weighted average) trong MySQL: (SUM(values) * weight) / (sum of weights).

Ví dụ minh họa

Tạo bảng và chèn dữ liệu

mysql> CREATE TABLE DemoTable (
    Number INT
);
mysql> INSERT INTO DemoTable VALUES (56), (78), (89), (98), (91), (96);

Xem dữ liệu

mysql> SELECT * FROM DemoTable;
+--------+
| Number |
+--------+
| 56     |
| 78     |
| 89     |
| 98     |
| 91     |
| 96     |
+--------+

Truy vấn: Trung bình có trọng số (ví dụ trọng số 100 cho sum, 500 cho mẫu số?)

mysql> SELECT (SUM(Number) * 100) / (100 + 500) FROM DemoTable;

Kết quả

+-------------------------------+
| (SUM(Number)*100)/(100+500)   |
+-------------------------------+
| 84.6667                       |
+-------------------------------+

Phân tích công thức

Công thức: (SUM(Number) * 100) / 600

  • SUM(Number) = 56+78+89+98+91+96 = 508
  • 508 * 100 / 600 = 50800 / 600 = 84.6667

Lưu ý: Ví dụ này mang tính demo công thức tùy chỉnh, không phải trung bình cộng thông thường.

Trung bình cộng thông thường (AVG)

SELECT AVG(Number) FROM DemoTable;  -- 84.6667

Kết quả trùng hợp vì (SUM * 100) / 600 = SUM / 6 = AVG khi N=6.

Trung bình có trọng số thực tế (Weighted Average)

Giả sử bảng có cột Value và Weight:

SELECT SUM(Value * Weight) / SUM(Weight) AS weighted_avg FROM DemoTable;

Lưu ý

  • Dùng CAST(... AS DECIMAL(10,2)) nếu cần làm tròn.
  • Tránh chia cho 0: NULLIF(SUM(Weight), 0).