Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MySQL

MySQL: นับจำนวนรวมจาก 2 ตารางด้วย UNION ALL และ COUNT


คำอธิบาย

ใช้ 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(*): นับจำนวนในแต่ละกลุ่ม

การคำนวณยืนยัน

NameTable1Table2Total
Chris112
Robert224
Mike101
David011

กรณีต้องการนับเฉพาะค่าที่ไม่ซ้ำ (Distinct)

SELECT Name, COUNT(*) as Total_Count
FROM (
    SELECT Name FROM DemoTable1
    UNION
    SELECT Name FROM DemoTable2
) tbl
GROUP BY Name;