เมื่อต้องการเลือกแถวที่คอลัมน์เฉพาะมีค่า 0 และจัดกลุ่ม (GROUP BY) ตามคอลัมน์อื่น ให้ใช้ WHERE กรองค่า 0 ก่อน แล้วค่อย GROUP BY (หรือใช้ HAVING หากกรองหลัง Group)
ตัวอย่างการใช้งาน
สร้างตารางสถานะสมรส (0=โสด, 1=สมรส):
mysql> create table DemoTable1344 (SequenceId int NOT NULL AUTO_INCREMENT PRIMARY KEY, ClientId int, isMarried tinyint(1)); mysql> insert into DemoTable1344(ClientId,isMarried) values(4567,0),(9876,0),(5432,1),(4567,1),(9873,0);
ข้อมูลทั้งหมด:
+------------+----------+-----------+ | SequenceId | ClientId | isMarried | +------------+----------+-----------+ | 1 | 4567 | 0 | | 2 | 9876 | 0 | | 3 | 5432 | 1 | | 4 | 4567 | 1 | | 5 | 9873 | 0 | +------------+----------+-----------+
คำสั่งเลือกแถวที่ isMarried=0 แล้ว GROUP BY ClientId
mysql> select SequenceId, ClientId, isMarried
-> from DemoTable1344
-> group by ClientId
-> having isMarried=0;
ผลลัพธ์
+------------+----------+-----------+ | SequenceId | ClientId | isMarried | +------------+----------+-----------+ | 1 | 4567 | 0 | | 2 | 9876 | 0 | | 5 | 9873 | 0 | +------------+----------+-----------+
คำอธิบายและข้อสังเกต:
WHERE isMarried=0กรองแถวก่อน Group (เหลือ ClientId 4567, 9876, 9873)GROUP BY ClientIdจัดกลุ่ม ClientId ที่เหลือ (แต่ละกลุ่มมี 1 แถว)HAVING isMarried=0ในที่นี้ทำงานเหมือน WHERE เพราะแต่ละกลุ่มมีค่า isMarried เดียวกัน- ข้อควรระวัง:
SELECT SequenceIdขณะGROUP BY ClientIdไม่ใช่มาตรฐาน SQL (MySQL อนุญาตแต่ค่าอาจไม่แน่นอน) ควรใช้ Aggregate function เช่นMIN(SequenceId)หรือANY_VALUE(SequenceId)