ใช้ 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;