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

หลีกเลี่ยงการแสดงค่าซ้ำใน MySQL ด้วย GROUP BY และ HAVING

บทนำ

การแสดงเฉพาะค่าที่ไม่ซ้ำกัน (Unique Values) หรือค่าที่ปรากฏเพียงครั้งเดียว สามารถทำได้ด้วย GROUP BY ร่วมกับ HAVING COUNT(*) = 1

รูปแบบการใช้งาน

SELECT yourColumnName
FROM yourTableName
GROUP BY yourColumnName
HAVING COUNT(*) = 1;

ตัวอย่างการสร้างตารางและเพิ่มข้อมูล

mysql> CREATE TABLE DemoTable (
    -> Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
    -> Subject VARCHAR(100)
    -> );
Query OK, 0 rows affected (0.70 sec)
mysql> INSERT INTO DemoTable(Subject) VALUES('MySQL');
mysql> INSERT INTO DemoTable(Subject) VALUES('MongoDB');
mysql> INSERT INTO DemoTable(Subject) VALUES('Java');
mysql> INSERT INTO DemoTable(Subject) VALUES('MongoDB');
mysql> INSERT INTO DemoTable(Subject) VALUES('C');
mysql> INSERT INTO DemoTable(Subject) VALUES('C++');
mysql> INSERT INTO DemoTable(Subject) VALUES('Java');
mysql> INSERT INTO DemoTable(Subject) VALUES('C');

แสดงข้อมูลทั้งหมด

mysql> SELECT * FROM DemoTable;

ผลลัพธ์

+----+---------+
| Id | Subject |
+----+---------+
| 1  | MySQL   |
| 2  | MongoDB |
| 3  | Java    |
| 4  | MongoDB |
| 5  | C       |
| 6  | C++     |
| 7  | Java    |
| 8  | C       |
+----+---------+
8 rows in set (0.00 sec)

คำสั่งแสดงเฉพาะค่าที่ไม่ซ้ำ (ปรากฏ 1 ครั้ง)

mysql> SELECT Subject FROM DemoTable
    -> GROUP BY Subject
    -> HAVING COUNT(*) = 1;

ผลลัพธ์

+---------+
| Subject |
+---------+
| MySQL   |
| C++     |
+---------+
2 rows in set (0.00 sec)

คำอธิบาย

  • GROUP BY Subject จัดกลุ่มแถวที่มี Subject เหมือนกัน
  • HAVING COUNT(*) = 1 กรองเฉพาะกลุ่มที่มีจำนวน 1 แถว
  • ต่างจาก DISTINCT ที่แสดงค่าที่ไม่ซ้ำทุกค่า (รวมค่าที่ซ้ำหลายครั้งด้วย)