Lọc giá trị duy nhất (xuất hiện đúng 1 lần) trong MySQL
Sử dụng GROUP BY kết hợp HAVING COUNT(*) = 1 để tìm các giá trị chỉ xuất hiện một lần duy nhất trong cột (loại bỏ cả giá trị trùng lặp và giá trị không tồn tại).
Ví dụ minh họa
Tạo bảng DemoTable723:
mysql> CREATE TABLE DemoTable723 (Value INT); Query OK, 0 rows affected (0.58 sec)
Chèn dữ liệu (có giá trị trùng và không trùng):
mysql> INSERT INTO DemoTable723 VALUES(100); Query OK, 1 row affected (0.13 sec) mysql> INSERT INTO DemoTable723 VALUES(200); Query OK, 1 row affected (0.13 sec) mysql> INSERT INTO DemoTable723 VALUES(200); Query OK, 1 row affected (0.12 sec) mysql> INSERT INTO DemoTable723 VALUES(100); Query OK, 1 row affected (0.20 sec) mysql> INSERT INTO DemoTable723 VALUES(300); Query OK, 1 row affected (0.14 sec) mysql> INSERT INTO DemoTable723 VALUES(400); Query OK, 1 row affected (0.16 sec) mysql> INSERT INTO DemoTable723 VALUES(400); Query OK, 1 row affected (0.12 sec) mysql> INSERT INTO DemoTable723 VALUES(600); Query OK, 1 row affected (0.12 sec) mysql> INSERT INTO DemoTable723 VALUES(400); Query OK, 1 row affected (0.13 sec) mysql> INSERT INTO DemoTable723 VALUES(200); Query OK, 1 row affected (0.17 sec)
Xem dữ liệu gốc:
mysql> SELECT * FROM DemoTable723;
+-------+ | Value | +-------+ | 100 | | 200 | | 200 | | 100 | | 300 | | 400 | | 400 | | 600 | | 400 | | 200 | +-------+ 10 rows in set (0.00 sec)
Thống kê: 100 (2 lần), 200 (3 lần), 300 (1 lần), 400 (3 lần), 600 (1 lần)
Truy vấn lấy giá trị chỉ xuất hiện 1 lần:
mysql> SELECT * FROM DemoTable723 GROUP BY Value HAVING COUNT(Value) = 1;
Kết quả (chỉ 300 và 600):
+-------+ | Value | +-------+ | 300 | | 600 | +-------+ 2 rows in set (0.00 sec)
Giải thích
GROUP BY Value: Gom nhóm các hàng cùng giá trịHAVING COUNT(Value) = 1: Lọc nhóm có đúng 1 hàngSELECT *trong MySQL cho phép chọn cột không trong GROUP BY (chỉ lấy giá trị đại diện)
Các biến thể