Đếm tần suất giá trị chuỗi từ nhiều bảng với UNION ALL
Sử dụng UNION ALL gộp dữ liệu từ 2 bảng, sau đó GROUP BY và COUNT(*) để đếm tổng số lần xuất hiện của mỗi giá trị.
1. Tạo bảng 1 và chèn dữ liệu
mysql> CREATE TABLE DemoTable1 (Name VARCHAR(20));
mysql> INSERT INTO DemoTable1 VALUES ('Chris'), ('Robert'), ('Mike'), ('Robert');
2. Tạo bảng 2 và chèn dữ liệu
mysql> CREATE TABLE DemoTable2 (Name VARCHAR(40));
mysql> INSERT INTO DemoTable2 VALUES ('Robert'), ('Chris'), ('Robert'), ('David');
3. Xem dữ liệu 2 bảng
mysql> SELECT * FROM DemoTable1; mysql> SELECT * FROM DemoTable2;
Bảng 1: Chris(1), Robert(2), Mike(1) | Bảng 2: Robert(2), Chris(1), David(1)
4. Truy vấn: Đếm kết hợp từ cả 2 bảng
mysql> SELECT tbl.Name, COUNT(*) AS Total_Count
FROM (
SELECT Name FROM DemoTable1
UNION ALL
SELECT Name FROM DemoTable2
) tbl
GROUP BY tbl.Name;
5. Kết quả
+--------+-------------+ | Name | Total_Count | +--------+-------------+ | Chris | 2 | | Robert | 4 | | Mike | 1 | | David | 1 | +--------+-------------+
Giải thích:
UNION ALL: Gộp tất cả hàng (giữ trùng lặp) - khácUNION(loại trùng)- Bảng dẫn xuất
tblcó 8 hàng (4+4) GROUP BY Name+COUNT(*)đếm tổng
So sánh UNION vs UNION ALL:
| Toán tử | Xử lý trùng lặp | Hiệu năng |
|---|---|---|
| UNION | Loại bỏ trùng (DISTINCT ngầm) | Chậm hơn (cần sort/unique) |
| UNION ALL | Giữ tất cả | Nhanh hơn |
Dùng UNION ALL khi cần đếm chính xác tần suất.