โจทย์: นับจำนวนคอลัมน์ที่มีค่า 1 ในแต่ละแถว
สมมติตารางมีคอลัมน์ value1, value2, value3 ที่เก็บค่า 0 หรือ 1 ต้องการทราบว่าแต่ละแถวมีค่า 1 กี่คอลัมน์
ไวยากรณ์ที่ใช้
SELECT
SUM(value1 + value2 + value3) AS Total_Number_Of_1,
SUM(value1 AND value2 AND value3) AS Total_Rows_With_All_1
FROM yourTable;
ตัวอย่าง: ตาราง demo36
CREATE TABLE demo36 (
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
value1 INT, value2 INT, value3 INT
);
INSERT INTO demo36 (value1, value2, value3) VALUES
(1,0,0), (1,0,1), (1,1,1), (0,1,0), (1,1,0);
ข้อมูล
+----+--------+--------+--------+ | id | value1 | value2 | value3 | +----+--------+--------+--------+ | 1 | 1 | 0 | 0 | | 2 | 1 | 0 | 1 | | 3 | 1 | 1 | 1 | | 4 | 0 | 1 | 0 | | 5 | 1 | 1 | 0 | +----+--------+--------+--------+
คำสั่งและผลลัพธ์
SELECT
SUM(value1 + value2 + value3) AS Total_Number_Of_1,
SUM(value1 AND value2 AND value3) AS Total_Rows_With_All_1
FROM demo36;
+-------------------+-----------------------+ | Total_Number_Of_1 | Total_Rows_With_All_1 | +-------------------+-----------------------+ | 9 | 1 | +-------------------+-----------------------+
คำอธิบาย
value1 + value2 + value3: บวกค่า 0/1 ในแต่ละแถว → ได้จำนวน 1 ต่อแถว (แถวที่ 1 = 1, แถวที่ 2 = 2, แถวที่ 3 = 3, ...)SUM(...): รวมค่าทุกแถว → 1+2+3+1+2 = 9value1 AND value2 AND value3: เป็น 1 ก็ต่อเมื่อทั้ง 3 คอลัมน์เป็น 1 (แถวที่ 3 เท่านั้น)SUM(...): นับจำนวนแถวที่ทุกคอลัมน์เป็น 1 → 1 แถว
ขยายใช้งาน: นับต่อแถว (Per Row)
SELECT id,
(value1 + value2 + value3) AS count_ones_per_row
FROM demo36;
+----+--------------------+ | id | count_ones_per_row | +----+--------------------+ | 1 | 1 | | 2 | 2 | | 3 | 3 | | 4 | 1 | | 5 | 2 | +----+--------------------+
กรณีคอลัมน์เยอะ: ใช้ Dynamic SQL หรือ Application Layer
หากมีคอลัมน์มาก (10+ คอลัมน์) ให้สร้างคำสั่ง SQL ด้วยโปรแกรม หรือคำนวณใน Application Layer จะสะดวกกว่า