บทนำ
การแสดงเฉพาะค่าที่ไม่ซ้ำกัน (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ที่แสดงค่าที่ไม่ซ้ำทุกค่า (รวมค่าที่ซ้ำหลายครั้งด้วย)