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).