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

นับจำนวนรายการด้วยเงื่อนไขสองเงื่อนไขใน MySQL

ใช้ 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 ตามลำดับ)