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

MySQL COUNT(*) จากหลายตารางพร้อมกัน

ใช้ UNION ALL รวมผลลัพธ์ COUNT จากหลายตาราง แล้วค่อย SUM รวมกัน

ไวยากรณ์

SELECT SUM(tbl.EachTableCount)
FROM (
    SELECT COUNT(*) AS EachTableCount FROM yourTableName1
    UNION ALL
    SELECT COUNT(*) AS EachTableCount FROM yourTableName2
) tbl;

ตัวอย่างใช้ตาราง userdemo และ wheredemo

ตาราง userdemo (4 แถว)

mysql> select * from userdemo;
+--------+----------+------------------+
| UserId | UserName | RegisteredCourse |
+--------+----------+------------------+
| 1      | John     | Java             |
| 2      | Larry    | C                |
| 3      | Carol    | C++              |
| 4      | Mike     | C#               |
+--------+----------+------------------+

ตาราง wheredemo (5 แถว)

mysql> select * from wheredemo;
+------+---------+
| Id   | Name    |
+------+---------+
| 101  | Maxwell |
| 110  | David   |
| 1000 | Carol   |
| 1100 | Bob     |
| 115  | Sam     |
+------+---------+

Query นับรวมทั้งสองตาราง

mysql> SELECT SUM(tbl.EachTableCount)
    -> FROM (
    ->     SELECT COUNT(*) AS EachTableCount FROM userdemo
    ->     UNION ALL
    ->     SELECT COUNT(*) AS EachTableCount FROM wheredemo
    -> ) tbl;

ผลลัพธ์:

+-------------------------+
| SUM(tbl.EachTableCount) |
+-------------------------+
| 9                       |
+-------------------------+
1 row in set (0.00 sec)

เหตุผลที่ใช้ UNION ALL ไม่ใช่ UNION

  • UNION ALL เก็บค่าซ้ำทั้งหมด (เราต้องการนับแถวแต่ละตารางแยกกัน)
  • UNION จะลบค่าซ้ำ ทำให้ผลรวมผิดถ้าจำนวนแถวในแต่ละตารางเท่ากัน

ขยายสำหรับหลายตาราง

SELECT SUM(tbl.cnt) FROM (
    SELECT COUNT(*) AS cnt FROM table1
    UNION ALL SELECT COUNT(*) FROM table2
    UNION ALL SELECT COUNT(*) FROM table3
    UNION ALL SELECT COUNT(*) FROM table4
) tbl;