การนับค่าที่มากกว่า 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