MySQL Group Concat cho chuỗi

Mysql Group Concat Strings



Hàm GROUP _CONCAT là một hàm tổng hợp GROUP BY cho phép bạn nối các giá trị cột từ nhiều hàng vào một trường duy nhất. Nó trả về một chuỗi nếu nhóm tập hợp chứa một hoặc không có giá trị cột nào rỗng và trả về giá trị NULL nếu không tìm thấy giá trị nào.

Hướng dẫn này sẽ dạy bạn cách sử dụng hàm MySQL GROUP_CONCAT () để kết hợp các chuỗi từ một nhóm với một số tùy chọn.







Cách sử dụng cơ bản

Như chúng ta đã đề cập, hàm này trả về một kết quả chuỗi với các giá trị của các giá trị không rỗng được nối hoặc NULL nếu không có giá trị nào tồn tại.



Cú pháp chung là:



GROUP_CONCAT ([ RIÊNG BIỆT ]expr[,expr ...]
[ ĐẶT BỞI expr
[ TĂNG DẦN | DESC ] [,col_name ...]]
[SEPARATOR str_val])

Giải trình

Từ cú pháp trên, bạn có thể thấy rằng hàm GROUP_CONCAT sử dụng các mệnh đề và ràng buộc MySQL để chỉ định các tùy chọn khác nhau:





  1. RIÊNG BIỆT: Mệnh đề DISTINCT giúp loại bỏ các giá trị trùng lặp trong nhóm thiết lập trong quá trình nối. Hãy xem hướng dẫn của chúng tôi giải thích về MySQL DISTINCT để hiểu cách hoạt động của nó.
  2. ĐẶT BỞI: Mệnh đề tiếp theo là ORDER BY giúp sắp xếp các giá trị theo một thứ tự xác định. Thứ tự có thể tăng dần hoặc giảm dần. Nếu không có thứ tự nào được chỉ định, MySQL định dạng các giá trị theo thứ tự tăng dần.
  3. BỘ RIÊNG : Mệnh đề này đặt chuỗi ký tự được chèn vào giữa các giá trị của nhóm trong quá trình nối. Theo mặc định, MySQL sử dụng dấu phẩy (,) để phân tách các giá trị.

GHI CHÚ: Kết quả chuỗi được tạo bởi hàm GROUP_CONCAT () của MySQL được giới hạn ở độ dài giá trị được đặt trong biến group_concat_max_len. Giá trị này được xác định trong hệ thống và có giá trị mặc định là 1024. Bạn có thể thay đổi giá trị này trên toàn cầu hoặc đặt nó trong phiên bạn cần.

BỘ [ TOÀN CẦU | PHIÊN HỌP ]group_concat_max_len= giá trị ;

Hãy xem xét tài liệu tham khảo dưới đây để tìm hiểu thêm:



https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html#sysvar_group_concat_max_len

Cách hoạt động: Ví dụ

Cho phép tôi sử dụng một ví dụ đơn giản để giải thích cách hoạt động của hàm GROUP_CONCAT (). Hãy xem xét bảng có một trường cho CHAR như sau:

TẠO RA BÀN kết hợp ( giá trị CHAR );

Hãy để chúng tôi chèn các giá trị vào bảng như được hiển thị trong truy vấn dưới đây:

CHÈN VÀO TRONG kết hợp ( giá trị ) GIÁ TRỊ ('NS'),('VÀ'),('NS'),('NS'),('HOẶC');

Nếu chúng ta thực hiện thao tác GROUP_CONCAT cơ bản trên các giá trị trong bảng, chúng ta sẽ nhận được kết quả chuỗi như hình dưới đây:

LỰA CHỌN GROUP_CONCAT ( RIÊNG BIỆT giá trị ĐẶT BỞI giá trị TĂNG DẦN BỘ RIÊNG'') TỪ kết hợp ;

Giá trị kết quả là:

+ ------------------------------------------------- -------------- +
| GROUP_CONCAT ( RIÊNG BIỆT giá trị ĐẶT BỞI giá trị TĂNG DẦN BỘ RIÊNG'') |
+ ------------------------------------------------- -------------- +
|E H L O|
+ ------------------------------------------------- -------------- +
1hàng ngang trong bộ (0,01giây)

Bạn có muốn một cách khác để hiểu điều gì đã xảy ra với kết quả được đưa ra ở trên không?

Chúng tôi bắt đầu bằng cách loại bỏ tất cả các giá trị trùng lặp do mệnh đề MySQL DISTINCT loại bỏ một L.

Tiếp theo, chúng tôi tiến hành ĐẶT HÀNG THEO thứ tự tăng dần như được định nghĩa trong (ASC), điều này làm thay đổi chuỗi dưới dạng

XIN CHÀO->EHLO

Cuối cùng, chúng tôi thực hiện quá trình nối bằng cách sử dụng một khoảng trắng làm dấu phân cách cho các giá trị đã đặt, kết quả là chuỗi E H L O từ {H, E, L, L O}.

Các trường hợp sử dụng mẫu

Hãy để chúng tôi lấy một cơ sở dữ liệu thực và sử dụng nó để minh họa cách chúng tôi có thể triển khai hàm GROUP_CONCAT (). Trong ví dụ này, chúng tôi sẽ sử dụng cơ sở dữ liệu Sakila và cụ thể là bảng địa chỉ từ cơ sở dữ liệu Sakila.

Hãy xem xét tài nguyên bên dưới để tải xuống cơ sở dữ liệu cho các ví dụ của bạn:

https://dev.mysql.com/doc/index-other.html

Trong bảng địa chỉ của cơ sở dữ liệu Sakila, bạn sẽ nhận được cột quận. Chúng tôi có thể lấy tất cả các quận duy nhất được phân tách bằng một dấu sổ như được hiển thị trong truy vấn bên dưới:

LỰA CHỌN GROUP_CONCAT ( RIÊNG BIỆT quận ĐẶT BỞI quận SEPARATOR'|') TỪ sakila.address GIỚI HẠN 5;

Truy vấn ở trên sẽ hiển thị tất cả các quận DISTINCT và sắp xếp chúng theo thứ tự tăng dần được phân tách bằng dấu sổ.

GHI CHÚ: Hàm GROUP_CONCAT () là một hàm tổng hợp. Do đó, bạn bắt buộc phải chỉ định câu lệnh ORDER BY bên trong hàm chứ không phải trong câu lệnh SELECT.

Phần kết luận

Hàm MySQL GROUP_CONCAT () được thảo luận trong hướng dẫn này là một hàm hữu ích cho phép bạn tạo dữ liệu duy nhất, được sắp xếp và tổ chức từ một bảng có thể chứa dữ liệu trùng lặp và dữ liệu không có thứ tự.

Hãy xem xét các tài liệu hoặc các hướng dẫn MySQL khác của chúng tôi để tìm hiểu thêm.