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

MySQL GROUP BY và CONCAT() hiển thị tên first/last name duy nhất


Giới thiệu

Kết hợp GROUP BY và CONCAT() để gộp FirstName và LastName thành tên đầy đủ, đồng thời loại bỏ các bản ghi trùng lặp.

Ví dụ minh họa

Tạo bảng, thêm index và chèn dữ liệu

mysql> CREATE TABLE DemoTable (
    FirstName VARCHAR(100),
    LastName VARCHAR(100)
);
mysql> ALTER TABLE DemoTable ADD INDEX (FirstName, LastName);
mysql> INSERT INTO DemoTable VALUES 
('Adam', 'Smith'), ('Adam', 'Smith'), ('John', 'Doe'), 
('Carol', 'Taylor'), ('John', 'Doe');

Xem dữ liệu (có trùng lặp)

mysql> SELECT * FROM DemoTable;
+-----------+----------+
| FirstName | LastName |
+-----------+----------+
| Adam      | Smith    |
| Adam      | Smith    |
| Carol     | Taylor   |
| John      | Doe      |
| John      | Doe      |
+-----------+----------+

Truy vấn gộp tên và loại trùng

mysql> SELECT CONCAT(FirstName, ' ', LastName) AS combinedName 
FROM DemoTable 
GROUP BY LastName, FirstName;

Kết quả

+--------------+
| combinedName |
+--------------+
| Adam Smith   |
| Carol Taylor |
| John Doe     |
+--------------+

Giải thích

  • GROUP BY LastName, FirstName: Nhóm theo cặp (LastName, FirstName), mỗi cặp chỉ xuất hiện 1 lần.
  • CONCAT(FirstName, ' ', LastName): Nối chuỗi với dấu cách giữa.
  • Thứ tự GROUP BY không ảnh hưởng kết quả nhưng ảnh hưởng thứ tự hiển thị (nếu không có ORDER BY).

Lưu ý về ONLY_FULL_GROUP_BY

Nếu bật mode ONLY_FULL_GROUP_BY (mặc định từ MySQL 5.7), mọi cột trong SELECT phải nằm trong GROUP BY hoặc trong hàm tổng hợp. Truy vấn trên hợp lệ vì chỉ chọn cột đã GROUP BY.

Mở rộng: DISTINCT thay cho GROUP BY

SELECT DISTINCT CONCAT(FirstName, ' ', LastName) AS combinedName 
FROM DemoTable 
ORDER BY combinedName;

Cách này đơn giản hơn nếu chỉ cần loại trùng kết quả cuối cùng.