การนับแถว (COUNT) หลายตารางในคิวรี่เดียว
ใช้ **Subquery** ในส่วน SELECT เพื่อนับแถวของแต่ละตารางแยกกัน แล้วรวมผลลัพธ์ในแถวเดียว
Syntax
SELECT
(SELECT COUNT(*) FROM table1) AS table1_count,
(SELECT COUNT(*) FROM table2) AS table2_count,
...;
ตัวอย่างการใช้งาน
สร้างตารางแรก DemoTable1 (ชื่อ):
mysql> CREATE TABLE DemoTable1 (FirstName VARCHAR(100));
Query OK, 0 rows affected (0.54 sec)
mysql> INSERT INTO DemoTable1 VALUES ('Bob'), ('James'), ('John'), ('David');
Query OK, 4 rows affected
สร้างตารางที่สอง DemoTable2 (คะแนน):
mysql> CREATE TABLE DemoTable2 (Marks INT); Query OK, 0 rows affected (0.65 sec) mysql> INSERT INTO DemoTable2 VALUES (98), (89), (67), (34), (32), (42); Query OK, 6 rows affected
นับแถวทั้งสองตารางพร้อมกัน:
mysql> SELECT
(SELECT COUNT(*) FROM DemoTable1) AS First_Table_Row,
(SELECT COUNT(*) FROM DemoTable2) AS Second_Table_Row;
+-----------------+------------------+ | First_Table_Row | Second_Table_Row | +-----------------+------------------+ | 4 | 6 | +-----------------+------------------+ 1 row in set (0.00 sec)
วิธีอื่นๆ
- UNION ALL (แนวตั้ง):
SELECT 'DemoTable1' AS tbl, COUNT(*) FROM DemoTable1 UNION ALL SELECT 'DemoTable2', COUNT(*) FROM DemoTable2;
- JOIN (ถ้ามีความสัมพันธ์): ไม่เหมาะสำหรับ COUNT แยกตาราง
- INFORMATION_SCHEMA (ประมาณการ):
SELECT TABLE_NAME, TABLE_ROWS FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'your_db' AND TABLE_NAME IN ('DemoTable1','DemoTable2');หมายเหตุ: TABLE_ROWS เป็นค่าประมาณการสำหรับ InnoDB
ประสิทธิภาพ
- Subquery COUNT(*) บน InnoDB อาจช้า หากตารางใหญ่ (Full Table Scan)
- ควรมี Index หรือใช้ Counter Table / Trigger นับไว้ล่วงหน้า
COUNT(*)เร็วกว่าCOUNT(col)เพราะไม่นับ NULL