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

MySQL: นับค่า NOT NULL จากหลายตารางในคำสั่งเดียว (ไม่นับ NULL)

การนับเฉพาะค่า NOT NULL จากหลายตารางพร้อมกันด้วย Subquery

ใช้ Subquery ใน SELECT clause เพื่อนับ COUNT(column) (นับเฉพาะ non-NULL) จากหลายตารางในคำสั่งเดียว

สร้างตารางแรกและข้อมูล

mysql> create table DemoTable1 (Id int);
mysql> insert into DemoTable1 values(1), (NULL), (2), (3);

สร้างตารางที่สองและข้อมูล

mysql> create table DemoTable2 (Id int);
mysql> insert into DemoTable2 values(10), (NULL), (NULL);

ข้อมูลในตาราง

DemoTable1:  1, NULL, 2, 3  (4 rows, 3 non-null)
DemoTable2:  10, NULL, NULL   (3 rows, 1 non-null)

คำสั่งนับ NOT NULL จากทั้งสองตาราง

mysql> select
    -> (select count(Id) from DemoTable1) as CountFirstTableId,
    -> (select count(Id) from DemoTable2) as CountSecondTableId;

ผลลัพธ์

+-------------------+--------------------+
| CountFirstTableId | CountSecondTableId |
+-------------------+--------------------+
| 3                 | 1                  |
+-------------------+--------------------+

อธิบาย COUNT(column) vs COUNT(*)

รูปแบบอื่น: UNION ALL + GROUP BY

SELECT 'DemoTable1' AS tbl, COUNT(Id) AS cnt FROM DemoTable1
UNION ALL
SELECT 'DemoTable2', COUNT(Id) FROM DemoTable2;

ผลลัพธ์ 2 แถว แทนคอลัมน์ 2 คอลัมน์

กรณีตารางเยอะ: Dynamic SQL

หากมีหลายตาราง ใช้ information_schema.tables สร้าง query อัตโนมัติ แล้ว PREPARE/EXECUTE

ข้อสังเกต: Subquery ใน SELECT clause รันแยกต่างหาก อาจช้ากว่า JOIN หากตารางใหญ่และเกี่ยวข้องกัน แต่สำหรับตารางอิสระต่อกัน (no relationship) วิธีนี้สะดวกและอ่านง่าย

ฟังก์ชันนับอะไรตัวอย่างข้างต้น
COUNT(*)ทุกแถว (รวม NULL)DemoTable1: 4, DemoTable2: 3
COUNT(Id)เฉพาะแถวที่ Id ไม่เป็น NULLDemoTable1: 3, DemoTable2: 1