ใช้ CASE statement ภายใน SUM() เพื่อนับตามเงื่อนไขที่ซับซ้อน
สร้างตารางตัวอย่าง
mysql> CREATE TABLE DemoTable (
-> StudentMarks INT,
-> isValid TINYINT(1)
-> );
เพิ่มข้อมูลตัวอย่าง
mysql> INSERT INTO DemoTable VALUES(45, 0); mysql> INSERT INTO DemoTable VALUES(78, 1); mysql> INSERT INTO DemoTable VALUES(45, 1); mysql> INSERT INTO DemoTable VALUES(78, 1); mysql> INSERT INTO DemoTable VALUES(45, 0); mysql> INSERT INTO DemoTable VALUES(82, 1); mysql> INSERT INTO DemoTable VALUES(62, 1);
แสดงข้อมูลทั้งหมด
mysql> SELECT * FROM DemoTable;
ผลลัพธ์:
+--------------+---------+ | StudentMarks | isValid | +--------------+---------+ | 45 | 0 | | 78 | 1 | | 45 | 1 | | 78 | 1 | | 45 | 0 | | 82 | 1 | | 62 | 1 | +--------------+---------+
คำสั่งนับด้วยเงื่อนไขสองระดับ
mysql> SELECT StudentMarks,
-> SUM(CASE
-> WHEN StudentMarks = 45 THEN CASE WHEN isValid = 1 THEN 1 ELSE 0 END
-> ELSE 1
-> END) AS Freq
-> FROM DemoTable
-> GROUP BY StudentMarks;
ผลลัพธ์:
+--------------+------+ | StudentMarks | Freq | +--------------+------+ | 45 | 1 | | 78 | 2 | | 82 | 1 | | 62 | 1 | +--------------+------+
คำอธิบาย: สำหรับคะแนน 45 นับเฉพาะที่ isValid=1 (ได้ 1 รายการ) ส่วนคะแนนอื่นนับทุกแถว (ได้ 1, 2, 1 ตามลำดับ)