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

วิธีนับจำนวนค่าเท่ากับ 0 และมากกว่า 0 ในคอลัมน์ MySQL

ใช้ CASE WHEN ภายใน SUM() เพื่อนับเงื่อนไขหลายอย่างพร้อมกัน

รูปแบบ SUM(CASE WHEN condition THEN 1 ELSE 0 END) ใช้ได้กับเงื่อนไขซับซ้อน ให้นับแถวที่ตรงเงื่อนไขแต่ละข้อใน Query เดียว

ตัวอย่างสร้างตารางและข้อมูล

CREATE TABLE DemoTable (Number INT);
INSERT INTO DemoTable VALUES (10), (0), (20), (50), (0), (0), (40);

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

+--------+
| Number |
+--------+
| 10     |
| 0      |
| 20     |
| 50     |
| 0      |
| 0      |
| 40     |
+--------+

คำสั่งนับ > 0 และ = 0 พร้อมกัน

SELECT 
    SUM(CASE WHEN Number > 0 THEN 1 ELSE 0 END) AS TotalGreaterThanZero,
    SUM(CASE WHEN Number = 0 THEN 1 ELSE 0 END) AS TotalEqualToZero
FROM DemoTable 
WHERE Number >= 0;

ผลลัพธ์

+--------------------------+--------------------+
| TotalGreaterThanZero     | TotalEqualToZero   |
+--------------------------+--------------------+
| 4                        | 3                  |
+--------------------------+--------------------+

คำอธิบาย:

  • CASE WHEN Number > 0 THEN 1 ELSE 0 END คืน 1 ถ้ามากกว่า 0, ไม่ใช่คืน 0
  • SUM(...) รวมค่า 1/0 → ได้จำนวนแถวที่ตรงเงื่อนไข
  • ทำได้ใน Query เดียว (Single Pass) ไม่ต้อง Query หลายครั้ง

รูปแบบย่อ (MySQL เท่านั้น): SUM(Number > 0) เพราะ Boolean TRUE=1, FALSE=0

SELECT 
    SUM(Number > 0) AS GreaterThanZero,
    SUM(Number = 0) AS EqualToZero,
    SUM(Number < 0) AS LessThanZero
FROM DemoTable;

⚠ ข้อควรระวัง: รูปแบบ SUM(condition) เป็น MySQL-specific ไม่ใช่ Standard SQL ควรใช้ CASE WHEN หากต้องการ Portable