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

คิวรี MySQL เลือกค่าที่ซ้ำและนับจำนวน (GROUP BY HAVING)

บทความนี้สาธิตการใช้ GROUP BY ... HAVING เพื่อค้นหาค่าที่ปรากฏซ้ำ (Duplicate Values) และนับจำนวนครั้งที่เกิดขึ้น

สร้างตารางและข้อมูลทดสอบ

mysql> CREATE TABLE DemoTable673(
    Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
    Value INT
);
Query OK, 0 rows affected (0.59 sec)

mysql> INSERT INTO DemoTable673(Value) VALUES(10);
mysql> INSERT INTO DemoTable673(Value) VALUES(20);
mysql> INSERT INTO DemoTable673(Value) VALUES(10);
mysql> INSERT INTO DemoTable673(Value) VALUES(30);
mysql> INSERT INTO DemoTable673(Value) VALUES(20);
mysql> INSERT INTO DemoTable673(Value) VALUES(10);
mysql> INSERT INTO DemoTable673(Value) VALUES(10);

คิวรีหาค่าที่ซ้ำและนับจำนวน

mysql> SELECT Id, COUNT(*) AS myValue 
FROM DemoTable673 
GROUP BY Value 
HAVING COUNT(*) > 1;

ผลลัพธ์

+----+---------+
| Id | myValue |
+----+---------+
| 1  | 4       |
| 2  | 2       |
+----+---------+

คำอธิบาย:

  • GROUP BY Value - จัดกลุ่มตามค่า Value
  • COUNT(*) - นับจำนวนแถวในแต่ละกลุ่ม
  • HAVING COUNT(*) > 1 - กรองเฉพาะกลุ่มที่มีมากกว่า 1 แถว (ค่าซ้ำ)
  • คอลัมน์ Id ที่แสดงคือ Id แรกของแต่ละกลุ่ม (ขึ้นกับการจัดเก็บ)

หมายเหตุ: ใน MySQL 5.7+ ที่เปิด ONLY_FULL_GROUP_BY ต้องใช้ Aggregate Function สำหรับคอลัมน์ที่ไม่ได้อยู่ใน GROUP BY เช่น MIN(Id) หรือ ANY_VALUE(Id)