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

นับหลายเงื่อนไขในคอลัมน์ต่างกันพร้อมกันใน MySQL ด้วย SUM(IF())

การนับเงื่อนไขหลายอย่างในคอลัมน์ต่างกันด้วย SUM(IF())

เพื่อนับจำนวนแถวที่ตรงเงื่อนไขต่างๆ ในคอลัมน์ต่างกันพร้อมกันในคำสั่ง SELECT เดียว เราใช้ SUM(IF(condition, 1, 0)) สำหรับแต่ละเงื่อนไข

สร้างตารางและเพิ่มข้อมูล

mysql> CREATE TABLE DemoTable (FirstName VARCHAR(100), LastName VARCHAR(100));
Query OK, 0 rows affected (2.80 sec)

mysql> INSERT INTO DemoTable VALUES('Adam','Smith');
mysql> INSERT INTO DemoTable VALUES('John','Smith');
mysql> INSERT INTO DemoTable VALUES('John','Doe');
mysql> INSERT INTO DemoTable VALUES('Bob','Doe');
mysql> INSERT INTO DemoTable VALUES('Sam','Smith');

แสดงข้อมูลทั้งหมด

mysql> SELECT * FROM DemoTable;

ผลลัพธ์:

+-----------+----------+
| FirstName | LastName |
+-----------+----------+
| Adam      | Smith    |
| John      | Smith    |
| John      | Doe      |
| Bob       | Doe      |
| Sam       | Smith    |
+-----------+----------+
5 rows in set (0.00 sec)

คำสั่งนับ John ใน FirstName และ Smith ใน LastName พร้อมกัน

mysql> SELECT
    SUM(IF(FirstName = 'John', 1, 0)) AS John_Count,
    SUM(IF(LastName = 'Smith', 1, 0)) AS Smith_Count
    FROM DemoTable;

ผลลัพธ์:

+------------+-------------+
| John_Count | Smith_Count |
+------------+-------------+
| 2          | 3           |
+------------+-------------+
1 row in set (0.00 sec)

คำอธิบาย

  • IF(FirstName = 'John', 1, 0) : คืน 1 ถ้า FirstName เป็น John, ไม่ใช่คืน 0
  • SUM(...) : รวมค่า 1/0 → ได้จำนวนแถวที่ตรงเงื่อนไข
  • John_Count = 2 (แถวที่ 2 และ 3)
  • Smith_Count = 3 (แถวที่ 1, 2, 5)
  • วิธีนี้ยืดหยุ่นกว่า COUNT(CASE ...) และทำงานได้ใน MySQL ทุกเวอร์ชัน