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

เลือกแถวที่มีค่า Value เหมือนกัน 2 แถวใน MySQL ด้วย GROUP BY HAVING

เมื่อต้องการหาค่าในคอลัมน์ที่ปรากฏจำนวนครั้งที่กำหนด (เช่น ปรากฏพอดี 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(...)