Cả hai đều dùng để loại bỏ trùng lặp nhưng có mục đích và khả năng khác nhau.
SELECT DISTINCT
- Trả về các giá trị duy nhất của một hoặc nhiều cột.
- Có thể dùng với hàm tập hợp (MAX, AVG...).
- Thường áp dụng trên một cột.
Ví dụ DISTINCT
mysql> CREATE TABLE DistinctDemo (id INT, name VARCHAR(100)); mysql> INSERT INTO DistinctDemo VALUES(1,'John'),(2,'John'),(3,'Bob'),(4,'John'),(5,'David'),(6,'Bob'); mysql> SELECT DISTINCT name FROM DistinctDemo; +-------+ | name | +-------+ | John | | Bob | | David | +-------+
GROUP BY
- Nhóm các hàng theo một hoặc nhiều cột.
- Thường dùng kèm hàm tập hợp (COUNT, SUM, AVG...) để tính toán trên mỗi nhóm.
- Có thể chọn nhiều cột (cột nhóm + hàm tập hợp).
Ví dụ GROUP BY
mysql> CREATE TABLE GroupDemo1 (id INT, name VARCHAR(100), address VARCHAR(100)); mysql> INSERT INTO GroupDemo1 VALUES(1,'John','US'),(2,'Bob','UK'),(3,'David','US'),(4,'David','US'); mysql> SELECT address, COUNT(*) FROM GroupDemo1 GROUP BY address; +---------+----------+ | address | COUNT(*) | +---------+----------+ | US | 3 | | UK | 1 | +---------+----------+
Tóm tắt khác biệt
| Đặc điểm | SELECT DISTINCT | GROUP BY |
|---|---|---|
| Mục đích chính | Loại bỏ hàng trùng lặp | Nhóm dữ liệu để tính toán |
| Hàm tập hợp | Có thể dùng nhưng hiếm | Thường bắt buộc dùng |
| Số cột kết quả | Chỉ các cột DISTINCT | Cột nhóm + hàm tập hợp |
| Sắp xếp | Không đảm bảo thứ tự | Thường sắp xếp theo cột nhóm |
Chọn DISTINCT khi chỉ cần danh sách giá trị duy nhất. Chọn GROUP BY khi cần thống kê, tính toán trên từng nhóm.