Hàm GROUP_CONCAT trong MySQL

Hàm GROUP_CONCAT() trong MySQL được sử dụng để nối nhiều giá trị của các record trong column với nhau thành một chuỗi. Hàm GROUP_CONCAT() rất là hữu dụng cho việc tìm kiếm nhiều records dữ liệu, sau đó trả về một chuỗi.

Mô tả tình huống:

Giả sử chúng ta có bảng Product với dữ liệu như sau:

Id Name Price Description

1

Laptop 14,000,000 ASUS

2

Iphone 4s 17,000,000 Apple

3

Tivi TOSHIBA 6,300,000 32 inches

Áp dụng hàm GROUP_CONCAT() như sau:

Trường hợp 1: lấy tất cả record của cột Name và cộng chúng lại với nhau trả về một chuỗi, các record cách nhau bởi dấu phẩy

SELECT GROUP_CONCAT(NAME)
FROM Product

Kết quả trả về:

Laptop,Iphone 4s,Tivi TOSHIBA

Trường hợp 2: giống như trường hợp 1 nhưng các record được sắp sếp theo thứ tự tăng dần

SELECT GROUP_CONCAT(NAME ORDER BY NAME)
FROM Product

Kết quả trả về:

Iphone 4s,Laptop,Tivi TOSHIBA

Trường hợp 3: giống như trường hợp 2 nhưng các record được sắp sếp theo thứ tự giảm dần

SELECT GROUP_CONCAT(NAME ORDER BY NAME DESC)
FROM Product

Kết quả trả về:

Tivi TOSHIBA,Laptop,Iphone 4s

Trường hợp 4: bạn không muốn dùng dấu phẩy (,) giữa các record nữa, bạn có thể thay bất cứ ký tự nào khác

SELECT GROUP_CONCAT(NAME SEPARATOR '-')
FROM Product

Kết quả trả về:

Laptop-Iphone 4s-Tivi TOSHIBA

Ngoài ra, trong trường hợp giá trị các record trùng nhau, bạn có thể dùng DISTINCT để bỏ qua những record trùng nhau, ví dụ như bên dưới:

SELECT GROUP_CONCAT(DISTINCT NAME)
FROM Product

Như các bạn thấy kết quả dữ liệu của các trường hợp ở trên, kết quả các record của cột Name trả về cách nhau bởi dấu phẩy. Chúng ta nhìn thấy kết quả dính liền lại với nhau. Chúng ta mong muốn đặt một khoảng trắng vào phía sau dấu phẩy để dữ liệu chúng ta rõ ràng dễ đọc hơn. Chúng ta làm như sau:

SELECT GROUP_CONCAT(NAME SEPARATOR ', ')
FROM Product

Kết quả như sau:

Laptop, Iphone 4s, Tivi TOSHIBA

Chú ý: hàm GROUP_CONCAT() bỏ qua những giá trị null.

Như các bạn thấy đấy hàm này rất hữu dụng và rất dễ thực hành.

Góc Kinh Nghiệm chúc các bạn thành công! :razz:

 


Leave a Reply

Your email address will not be published. Required fields are marked *