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

นับค่าแนวนอน (Horizontal Count) ใน MySQL

การนับค่าที่มากกว่า 0 แบบแนวนอน (Per Row) ใน MySQL

ใช้ COUNT() ร่วมกับเงื่อนไข column > 0 OR NULL บนหลายคอลัมน์ แล้วรวมกัน (เทคนิค: COUNT(expr) นับเฉพื่อ expr ที่ไม่เป็น NULL)

ตัวอย่างการใช้งาน

สร้างตาราง 4 คอลัมน์ตัวเลข:

mysql> create table DemoTable (
    Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
    FirstValue int, SecondValue int, ThirdValue int, FourthValue int
);

เพิ่มข้อมูล (มีค่าลบ, 0, NULL):

mysql> insert into DemoTable(FirstValue,SecondValue,ThirdValue,FourthValue) values(-18,45,0,155);
mysql> insert into DemoTable(FirstValue,SecondValue,ThirdValue,FourthValue) values(0,235,NULL,15);

ข้อมูล:

+----+------------+-------------+------------+-------------+
| Id | FirstValue | SecondValue | ThirdValue | FourthValue |
+----+------------+-------------+------------+-------------+
| 1  | -18        | 45          | 0          | 155         |
| 2  | 0          | 235         | NULL       | 15          |
+----+------------+-------------+------------+-------------+

คิวรีนับค่าที่ > 0 ต่อแถว (Horizontal Count):

mysql> SELECT 
    COUNT(FirstValue > 0 OR NULL) +
    COUNT(SecondValue > 0 OR NULL) +
    COUNT(ThirdValue > 0 OR NULL) +
    COUNT(FourthValue > 0 OR NULL) AS TOTAL_VALUE 
FROM DemoTable;
+-------------+
| TOTAL_VALUE |
+-------------+
| 4           |
+-------------+

การคำนวณ:

  • แถว 1: 45 (>0), 155 (>0) = 2 ค่า | -18, 0 ไม่นับ
  • แถว 2: 235 (>0), 15 (>0) = 2 ค่า | 0, NULL ไม่นับ
  • รวม = 4

เทคนิค expr OR NULL: ใน MySQL เงื่อนไขที่เป็นจริง (True) = 1, เท็จ (False) = 0 | 1 OR NULL = 1 (ไม่เป็น NULL → นับได้) | 0 OR NULL = NULL (เป็น NULL → ไม่นับ) | ทำให้ COUNT() นับได้เฉพาะกรณีที่ True

วิธีอื่น (MySQL 8.0+): ใช้ SUM((FirstValue > 0) + (SecondValue > 0) + ...) โดย Boolean True=1, False=0