คำอธิบาย
ใช้ UNION ALL รวมข้อมูลจาก 2 ตารางก่อน แล้วค่อย GROUP BY และ COUNT(*) เพื่อนับจำนวนรวมของแต่ละค่า
ขั้นตอนการสร้างตารางและข้อมูลตัวอย่าง
ตารางที่ 1: DemoTable1
mysql> create table DemoTable1 ( Name varchar(20) ); Query OK, 0 rows affected (0.49 sec)
mysql> insert into DemoTable1 values('Chris');
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable1 values('Robert');
Query OK, 1 row affected (0.12 sec)
mysql> insert into DemoTable1 values('Mike');
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable1 values('Robert');
Query OK, 1 row affected (0.10 sec)
ตารางที่ 2: DemoTable2
mysql> create table DemoTable2 ( Name varchar(40) ); Query OK, 0 rows affected (0.43 sec)
mysql> insert into DemoTable2 values('Robert');
Query OK, 1 row affected (0.11 sec)
mysql> insert into DemoTable2 values('Chris');
Query OK, 1 row affected (0.10 sec)
mysql> insert into DemoTable2 values('Robert');
Query OK, 1 row affected (0.31 sec)
mysql> insert into DemoTable2 values('David');
Query OK, 1 row affected (0.13 sec)
คิวรี่นับรวมจากทั้ง 2 ตาราง
mysql> select tbl.Name, count(*) as Total_Count
from (
select Name from DemoTable1
UNION ALL
select Name from DemoTable2
) tbl
group by tbl.Name;
ผลลัพธ์
+--------+-------------+ | Name | Total_Count | +--------+-------------+ | Chris | 2 | | Robert | 4 | | Mike | 1 | | David | 1 | +--------+-------------+ 4 rows in set (0.00 sec)
คำอธิบาย
- UNION ALL: รวมทุกแถวจากทั้ง 2 ตาราง (รวมค่าซ้ำ) → 8 แถว
- UNION (ไม่มี ALL): จะลบค่าซ้ำ → ได้ 4 แถว (Chris, Robert, Mike, David)
- GROUP BY tbl.Name: จัดกลุ่มตามชื่อ
- COUNT(*): นับจำนวนในแต่ละกลุ่ม
การคำนวณยืนยัน
| Name | Table1 | Table2 | Total |
|---|---|---|---|
| Chris | 1 | 1 | 2 |
| Robert | 2 | 2 | 4 |
| Mike | 1 | 0 | 1 |
| David | 0 | 1 | 1 |
กรณีต้องการนับเฉพาะค่าที่ไม่ซ้ำ (Distinct)
SELECT Name, COUNT(*) as Total_Count
FROM (
SELECT Name FROM DemoTable1
UNION
SELECT Name FROM DemoTable2
) tbl
GROUP BY Name;