Một số RDBMS có GROUP_CONCAT()
cho phép bạn trả về một cột truy vấn dưới dạng danh sách được phân tách (ví dụ:danh sách được phân tách bằng dấu phẩy). MySQL và MariaDB là hai có chức năng như vậy.
PostgreSQL và SQL Server có các chức năng tương tự được gọi là STRING_AGG()
.
Mặt khác, Oracle có LISTAGG()
chức năng thực hiện khá nhiều điều tương tự (và có lẽ hơn thế nữa).
Vì vậy, bạn có thể nói rằng LISTAGG()
là GROUP_CONCAT()
của Oracle tương đương.
Ví dụ
Dưới đây là một ví dụ cơ bản để chứng minh cách LISTAGG()
của Oracle chức năng hoạt động:
SELECT LISTAGG(region_name, ',')
FROM regions;
Kết quả:
LISTAGG(REGION_NAME,',') ______________________________________________ Europe,Americas,Asia,Middle East and Africa
Trong trường hợp này, tôi đã chỉ định rằng dấu phân tách là dấu phẩy.
Đây là những gì sẽ xảy ra khi chúng tôi chỉ thực hiện truy vấn mà không có LISTAGG()
chức năng:
SELECT region_name
FROM regions;
Kết quả:
REGION_NAME _________________________ Europe Americas Asia Middle East and Africa
Chúng tôi nhận được bốn hàng, mỗi hàng có một giá trị riêng biệt, thay vì một hàng được phân tách bằng dấu phẩy chứa tất cả các giá trị.
LISTAGG()
hàm cũng cho phép chúng tôi sắp xếp các kết quả, chỉ trả về các giá trị duy nhất (thông qua DISTINCT
mệnh đề), và hơn thế nữa.
Xem LISTAGG()
Hàm trong Oracle để có thêm ví dụ.