Giới thiệu
Kết hợp GROUP_CONCAT(), COUNT() và GROUP BY để liệt kê ID và đếm số lần xuất hiện của mỗi giá trị riêng biệt.
1. Tạo bảng và dữ liệu
mysql> create table DemoTable (
-> CompanyId int NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> CompanyName varchar(20)
-> );
Query OK, 0 rows affected (0.62 sec)
mysql> insert into DemoTable(CompanyName) values('Amazon');
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable(CompanyName) values('Google');
Query OK, 1 row affected (0.09 sec)
mysql> insert into DemoTable(CompanyName) values('Google');
Query OK, 1 row affected (0.07 sec)
mysql> insert into DemoTable(CompanyName) values('Microsoft');
Query OK, 1 row affected (0.17 sec)
mysql> insert into DemoTable(CompanyName) values('Amazon');
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable(CompanyName) values('Amazon');
Query OK, 1 row affected (0.07 sec)
2. Dữ liệu gốc
mysql> select *from DemoTable;
+-----------+-------------+ | CompanyId | CompanyName | +-----------+-------------+ | 1 | Amazon | | 2 | Google | | 3 | Google | | 4 | Microsoft | | 5 | Amazon | | 6 | Amazon | +-----------+-------------+ 6 rows in set (0.00 sec)
3. Truy vấn thống kê
mysql> select CompanyName,
-> group_concat(CompanyId),
-> count(CompanyId) as count
-> from DemoTable
-> group by CompanyName
-> having count > 1;
4. Kết quả
+-------------+-------------------------+-------+ | CompanyName | group_concat(CompanyId) | count | +-------------+-------------------------+-------+ | Amazon | 1,5,6 | 3 | | Google | 2,3 | 2 | +-------------+-------------------------+-------+ 2 rows in set (0.00 sec)
Giải thích:
GROUP_CONCAT(CompanyId): Nối các ID thành chuỗi, phân cách bằng dấu phẩy (mặc định)HAVING count > 1: Chỉ hiển thị các giá trị xuất hiện từ 2 lần trở lên- Có thể tùy chỉnh separator:
GROUP_CONCAT(CompanyId SEPARATOR ';')
Ứng dụng: Phát hiện trùng lặp, audit dữ liệu, báo cáo tần suất.