เมื่อต้องการหาค่าในคอลัมน์ที่ปรากฏจำนวนครั้งที่กำหนด (เช่น ปรากฏพอดี 2 ครั้ง) สามารถใช้ GROUP BY ... HAVING COUNT(...) = n
ตัวอย่างการสร้างตาราง
mysql> create table DemoTable (
Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
Value int );
Query OK, 0 rows affected (0.52 sec)
เพิ่มข้อมูล (มีค่า 600 และ 800 ซ้ำ 2 ครั้งแต่ละค่า)
mysql> insert into DemoTable(Value) values(600); Query OK, 1 row affected (0.14 sec) mysql> insert into DemoTable(Value) values(600); Query OK, 1 row affected (0.14 sec) mysql> insert into DemoTable(Value) values(800); Query OK, 1 row affected (0.12 sec) mysql> insert into DemoTable(Value) values(800); Query OK, 1 row affected (0.09 sec)
แสดงข้อมูลทั้งหมด
mysql> select * from DemoTable;
+----+-------+ | Id | Value | +----+-------+ | 1 | 600 | | 2 | 600 | | 3 | 800 | | 4 | 800 | +----+-------+ 4 rows in set (0.00 sec)
คำสั่งหา Value ที่มีอยู่ใน Id 1 และ 2 (คือ 600) และปรากฏ 2 ครั้ง
mysql> select Value from DemoTable tbl where Id IN(1,2) group by Value having count(distinct Id) = 2;
ผลลัพธ์
+-------+ | Value | +-------+ | 600 | +-------+ 1 row in set (0.07 sec)
คำอธิบาย: คำสั่งนี้กรองเฉพาะ Id 1 และ 2 ก่อน แล้วจัดกลุ่มตาม Value แล้วเช็คว่ามี Id ที่แตกต่างกันครบ 2 ค่า (COUNT DISTINCT Id = 2) ถ้ามี แสดงว่า Value นั้นปรากฏในทั้ง Id 1 และ 2
กรณีทั่วไป: หาค่าที่ซ้ำ n ครั้ง ใช้ HAVING COUNT(*) = n โดยไม่ต้อง WHERE Id IN(...)