Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MySQL

Lấy giá trị duy nhất (DISTINCT) trong MySQL

Sử dụng từ khóa DISTINCT để loại bỏ các hàng trùng lặp trong kết quả truy vấn.

Cú pháp

SELECT DISTINCT tên_cột FROM tên_bảng;

Ví dụ minh họa

Tạo bảng demo:

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)

Chèn dữ liệu (có trùng Age):

mysql> INSERT INTO selectUniqueValue(Name, Age) VALUES
    -> ('John', 21), ('Carol', 21), ('Sam', 22), ('Mike', 22),
    -> ('David', 22), ('Larry', 23), ('Bob', 23), ('Maxwell', 22), ('Robert', 21);

Xem dữ liệu gốc (9 hàng):

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   |
+----+---------+------+

Lấy các tuổi duy nhất:

mysql> SELECT DISTINCT Age FROM selectUniqueValue;
+------+
| Age  |
+------+
| 21   |
| 22   |
| 23   |
+------+

DISTINCT trên nhiều cột

SELECT DISTINCT Name, Age FROM selectUniqueValue;

Trả về các cặp (Name, Age) duy nhất — trong ví dụ này 9 hàng vì Name đều khác nhau.

Kết hợp với COUNT

SELECT COUNT(DISTINCT Age) FROM selectUniqueValue; -- Kết quả: 3

DISTINCT vs GROUP BY

Đặc điểmDISTINCTGROUP BY
Mục đíchLoại bỏ hàng trùngNhóm dữ liệu + tổng hợp
Hiệu năngTương đương (MySQL tối ưu hóa)Tương đương
Có thể dùng hàm tổng hợpKhông trực tiếpCó (SUM, COUNT, AVG...)
Sắp xếp mặc địnhCó (theo cột DISTINCT)Có (theo cột GROUP BY)

Mẹo: SELECT DISTINCT * loại bỏ hàng trùng lặp hoàn toàn (tất cả cột giống nhau).