Giới thiệu
Hàm SUM() trong MySQL hoạt động chính xác với kiểu DECIMAL, phù hợp cho tính toán tiền tệ, tài chính tránh sai số điểm động (floating point error).
Ví dụ minh họa
Tạo bảng kiểu DECIMAL(7,2)
mysql> CREATE TABLE DemoTable (
Money DECIMAL(7,2)
);
DECIMAL(7,2): Tổng 7 chữ số, 2 chữ số sau dấu phẩy. Phạm vi: -99999.99 đến 99999.99.
Chèn dữ liệu
mysql> INSERT INTO DemoTable VALUES (100.67), (199.33), (500), (400), (800);
Xem dữ liệu
mysql> SELECT * FROM DemoTable;
+--------+ | Money | +--------+ | 100.67 | | 199.33 | | 500.00 | | 400.00 | | 800.00 | +--------+
Tính tổng
mysql> SELECT SUM(Money) FROM DemoTable;
+------------+ | SUM(Money) | +------------+ | 2000.00 | +------------+
Tại sao dùng DECIMAL cho tiền tệ?
| Kiểu | Ví dụ | Vấn đề |
|---|---|---|
| FLOAT/DOUBLE | 0.1 + 0.2 = 0.30000000000000004 | Sai số binary floating point |
| DECIMAL(10,2) | 0.1 + 0.2 = 0.30 | Chính xác tuyệt đối |
Lưu ý
SUM()trả về kiểu DECIMAL với precision đủ lớn chứa kết quả.- Nếu cột là VARCHAR chứa số, cần
CAST(col AS DECIMAL(10,2))trước khi SUM. COALESCE(SUM(Money), 0)trả về 0 thay vì NULL khi bảng rỗng.