Khi một ID xuất hiện nhiều lần với các giá trị khác nhau (Yes/No) trên cột ENUM, ta có thể dùng SUM() kết hợp biểu thức logic để đếm số lần xuất hiện của từng giá trị cho mỗi ID.
Ví dụ minh họa
Tạo bảng (cột ENUM chỉ nhận 'YES' hoặc 'NO'):
mysql> CREATE TABLE DemoTable1430 (
EmployeeId INT,
isMarried ENUM('YES', 'NO')
);
Chèn dữ liệu (ID 1001 xuất hiện 4 lần):
mysql> INSERT INTO DemoTable1430 VALUES (1001, 'Yes'); mysql> INSERT INTO DemoTable1430 VALUES (1001, 'No'); mysql> INSERT INTO DemoTable1430 VALUES (1001, 'Yes'); mysql> INSERT INTO DemoTable1430 VALUES (1001, 'Yes');
Dữ liệu:
mysql> SELECT * FROM DemoTable1430;
+------------+-----------+ | EmployeeId | isMarried | +------------+-----------+ | 1001 | YES | | 1001 | NO | | 1001 | YES | | 1001 | YES | +------------+-----------+
Đếm Yes/No theo nhóm EmployeeId
Sử dụng SUM() với biểu thức boolean (TRUE = 1, FALSE = 0):
mysql> SELECT EmployeeId,
SUM(isMarried = 'Yes') AS NumberOfMarried,
SUM(isMarried = 'No') AS NumberOfUnMarried
FROM DemoTable1430
GROUP BY EmployeeId;
Kết quả:
+------------+-----------------+-------------------+ | EmployeeId | NumberOfMarried | NumberOfUnMarried | +------------+-----------------+-------------------+ | 1001 | 3 | 1 | +------------+-----------------+-------------------+
Giải thích kỹ thuật
- Trong MySQL, biểu thức so sánh
isMarried = 'Yes'trả về1(TRUE) hoặc0(FALSE). SUM()cộng dồn các giá trị 1/0 này → hiệu quả là đếm số lần TRUE.- Cách này nhanh hơn và gọn hơn
COUNT(CASE WHEN ... THEN 1 END).
Mở rộng: Đếm nhiều giá trị ENUM
SELECT
EmployeeId,
SUM(status = 'Active') AS active_count,
SUM(status = 'Inactive') AS inactive_count,
SUM(status = 'Pending') AS pending_count
FROM users
GROUP BY EmployeeId;
Lưu ý: MySQL không phân biệt chữ hoa/thường cho ENUM khi so sánh, nhưng nên viết đúng chữ hoa/thường như định nghĩa để code rõ ràng.