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

เลือกค่าที่ไม่ซ้ำ (Distinct Values) ใน MySQL ด้วย DISTINCT


คำสั่งหลัก

ใช้ DISTINCT กำหนดให้คืนค่าเฉพาะค่าที่ไม่ซ้ำกัน

รูปแบบคำสั่ง

SELECT DISTINCT yourColumnName FROM yourTableName;

ตัวอย่างครบถ้วน

1. สร้างตาราง

mysql> create table selectUniqueValue 
    -> ( 
    -> Id int NOT NULL AUTO_INCREMENT PRIMARY KEY, 
    -> Name varchar(20), 
    -> Age int 
    -> ); 
Query OK, 0 rows affected (0.64 sec)

2. เพิ่มข้อมูล (อายุซ้ำหลายคน)

mysql> insert into selectUniqueValue(Name,Age) values('John',21); 
Query OK, 1 row affected (0.18 sec)
mysql> insert into selectUniqueValue(Name,Age) values('Carol',21); 
Query OK, 1 row affected (0.13 sec)
mysql> insert into selectUniqueValue(Name,Age) values('Sam',22); 
Query OK, 1 row affected (0.10 sec)
mysql> insert into selectUniqueValue(Name,Age) values('Mike',22); 
Query OK, 1 row affected (0.16 sec)
mysql> insert into selectUniqueValue(Name,Age) values('David',22); 
Query OK, 1 row affected (0.13 sec)
mysql> insert into selectUniqueValue(Name,Age) values('Larry',23); 
Query OK, 1 row affected (0.12 sec)
mysql> insert into selectUniqueValue(Name,Age) values('Bob',23); 
Query OK, 1 row affected (0.12 sec)
mysql> insert into selectUniqueValue(Name,Age) values('Maxwell',22); 
Query OK, 1 row affected (0.19 sec)
mysql> insert into selectUniqueValue(Name,Age) values('Robert',21); 
Query OK, 1 row affected (0.15 sec)

3. ดูข้อมูลทั้งหมด (9 แถว)

mysql> select * from selectUniqueValue;
+----+---------+------+
| Id | Name    | Age  |
+----+---------+------+
| 1  | John    | 21   |
| 2  | Carol   | 21   |
| 3  | Sam     | 22   |
| 4  | Mike    | 22   |
| 5  | David   | 22   |
| 6  | Larry   | 23   |
| 7  | Bob     | 23   |
| 8  | Maxwell | 22   |
| 9  | Robert  | 21   |
+----+---------+------+

4. SELECT DISTINCT อายุ

mysql> select distinct Age from selectUniqueValue;
+------+
| Age  |
+------+
| 21   |
| 22   |
| 23   |
+------+

DISTINCT หลายคอลัมน์ (Composite Distinct)

SELECT DISTINCT Name, Age FROM selectUniqueValue;

จะคืนค่าคู่ (Name, Age) ที่ไม่ซ้ำกันทั้งคู่

นับจำนวนค่าที่ไม่ซ้ำ

SELECT COUNT(DISTINCT Age) FROM selectUniqueValue;  -- → 3

DISTINCT vs GROUP BY

DISTINCTGROUP BY
Syntax เรียบง่ายรองรับ aggregate functions
เหมาะสำหรับ distinct values เท่านั้นเหมาะสำหรับ grouping + aggregation
ไม่สั่งลำดับได้ (ต้อง ORDER BY แยก)มี implied ordering ในบาง version

สรุป: ใช้ DISTINCT สำหรับ distinct values แบบง่าย ใช้ GROUP BY เมื่อต้อง aggregate ด้วย