Hàm tổng hợp chuỗi SQL

Ham Tong Hop Chuoi Sql



Nếu bạn đã từng làm việc với cơ sở dữ liệu SQL, có thể bạn đã quen với các hàm tổng hợp. Về cơ bản, chúng là một tập hợp các hàm thực hiện các phép tính trên một tập hợp các giá trị và trả về một kết quả duy nhất.

Một ví dụ bao gồm các hàm như SUM(), AVG(), COUNT(), MAX và MIN(). Tuy nhiên, một điều bạn sẽ nhận thấy về các hàm tổng hợp trong SQL là chúng hướng đến các phép toán số.

Nhưng bạn có biết rằng có những hàm tổng hợp xử lý các giá trị chuỗi không? Trong hướng dẫn này, chúng ta sẽ xem xét các hàm này, cách chúng hoạt động và cách chúng ta có thể sử dụng chúng trong cơ sở dữ liệu của mình.







LƯU Ý: Cần lưu ý rằng hầu hết các hàm được thảo luận trong bài đăng này không phải là một phần của SQL tiêu chuẩn. Do đó, chúng là phần mở rộng của nhiều công cụ cơ sở dữ liệu khác nhau như PostgreSQL, SQL Server, v.v.



Hàm tổng hợp chuỗi là gì?

Hàm tổng hợp chuỗi là một tập hợp các hàm thực hiện các thao tác tổng hợp trên một tập hợp các chuỗi trong một nhóm hoặc các hàng và trả về một kết quả duy nhất.



Chúng tôi chủ yếu sử dụng các hàm này với mệnh đề GROUP BY để nhóm các hàng dựa trên một cột nhất định và sau đó tổng hợp các chuỗi trong mỗi nhóm.





Một số hàm tổng hợp chuỗi phổ biến bao gồm:

  • GROUP_CONCAT() – PostgreSQL và MySQL
  • STRING_AGG – Máy chủ SQL
  • ARRAY_AGG – PostgreSQL
  • LISTAGG – Oracle

Hãy cùng chúng tôi khám phá từng chức năng và những gì nó cung cấp.



NHÓM_CONCAT()

Hàm GROUP_CONCAT() được hỗ trợ bởi cơ sở dữ liệu PostgreSQL và MySQL. Nó cho phép chúng ta nối các giá trị từ nhiều hàng thành một chuỗi.

Giả sử chúng ta có một bảng “nhân viên” như sau:

TẠO BẢNG nhân viên (
nhân viên_id INT AUTO_INCREMENT KHÓA CHÍNH,
first_name VARCHAR(50),
họ_VARCHAR(50),
bộ phận VARCHAR(50)
);

XÁC NHẬN VÀO nhân viên (tên, họ, bộ phận) GIÁ TRỊ
('Alice', 'Smith', 'Nhân sự'),
('Bob', 'Johnson', 'Tiếp thị'),
('Charlie', 'Wilson', 'Tài chính'),
('David', 'Nâu', 'Bán hàng'),
('Eva', 'Davis', 'Kỹ thuật');

Đầu ra:

Nếu chúng ta muốn xác định tên đầy đủ của nhân viên bằng cách lấy tên và ghép với họ, chúng ta có thể sử dụng hàm GROUP_CONCAT() như minh họa trong ví dụ sau:

LỰA CHỌN
phòng,
GROUP_CONCAT(first_name, '', Last_name) NHƯ full_name
TỪ
người lao động
NHÓM THEO
phòng;

Trong trường hợp này, chúng tôi sử dụng hàm để nối các chuỗi từ cột “first_name” và “last_name” và một chuỗi trống để thêm khoảng trắng vào tên.

Nó chứa một danh sách các nhân viên trong mỗi bộ phận.

STRING_AGG

Hàm này tương tự như hàm GROUP_CONCAT() nhưng nó chỉ được hỗ trợ trong cơ sở dữ liệu SQL Server.

Một cách sử dụng ví dụ như sau:

LỰA CHỌN
phòng,
STRING_AGG(first_name, Last_name, ' ') AS full_name
TỪ
người lao động
NHÓM THEO
phòng;

Điều này thực hiện nối chuỗi trên các cột được chỉ định dưới dạng khoảng trắng dưới dạng dấu phân cách.

ARRAY_AGG

Hàm ARRAY_AGG chỉ có trong cơ sở dữ liệu PostgreSQL. Nó cho phép chúng ta tổng hợp các giá trị thành một mảng duy nhất.

Một ví dụ như sau:

LỰA CHỌN
phòng,
ARRAY_AGG(first_name) NHƯ nhân viên_list
TỪ
người lao động
NHÓM THEO
phòng;

Điều này sẽ tổng hợp tên nhân viên dưới dạng một mảng.

LISTAGG()

Hàm LISTAGG() chỉ có trong cơ sở dữ liệu Oracle. Nó cho phép chúng ta nối các giá trị thành một chuỗi với một dấu phân cách được chỉ định.

Một ví dụ như sau:

CHỌN bộ phận, LISTAGG(first_name, Last_name,  ' ') TRONG NHÓM (ĐẶT HÀNG THEO tên nhân viên ASC) NHƯ nhân viên
TỪ nhân viên
NHÓM THEO bộ phận;

Điều này nối tên của nhân viên và dấu phân cách được chỉ định.

Phần kết luận

Trong hướng dẫn này, chúng ta đã tìm hiểu về các hàm tổng hợp chuỗi cho phép chúng ta cung cấp danh sách các giá trị chuỗi và thực hiện một thao tác thành một giá trị chuỗi kết quả duy nhất.