Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Hàm LISTAGG () trong Oracle

Trong Oracle, LISTAGG() hàm cho phép chúng tôi kết hợp dữ liệu từ nhiều hàng thành một hàng.

Chúng tôi có tùy chọn chỉ định dấu phân tách (chẳng hạn như dấu phẩy). Chúng tôi cũng có thể sắp xếp các kết quả được tạo ra bởi LISTAGG() chức năng và hơn thế nữa.

Cú pháp

Cú pháp như sau:

LISTAGG( [ ALL | DISTINCT ] measure_expr [, 'delimiter'] [listagg_overflow_clause] )
  [ WITHIN GROUP order_by_clause ] [OVER query_partition_clause]

Ở đâu listagg_overflow_clause là:

{ ON OVERFLOW ERROR }
|
{ ON OVERFLOW TRUNCATE [ 'truncation-indicator' ] [ { WITH | WITHOUT } COUNT ] }

Ví dụ

Giả sử chúng ta chạy truy vấn sau:

SELECT region_name
FROM regions;

Kết quả:

              REGION_NAME 
_________________________ 
Europe                    
Americas                  
Asia                      
Middle East and Africa    

Chúng ta có thể sử dụng LISTAGG() để chuyển những kết quả đó thành danh sách được phân tách bằng dấu phẩy:

SELECT LISTAGG(region_name, ', ')
FROM regions;

Kết quả:

                         LISTAGG(REGION_NAME,',') 
_________________________________________________ 
Europe, Americas, Asia, Middle East and Africa    

Thay đổi Dấu phân tách

Chúng ta có thể thay đổi đối số thứ hai thành một dấu phân tách khác:

SELECT LISTAGG(region_name, '; ') 
FROM regions;

Kết quả:

Europe; Americas; Asia; Middle East and Africa 

Bỏ qua Dấu phân cách

Chúng ta có thể bỏ qua đối số thứ hai để mỗi giá trị được nối với nhau mà không có dấu phân tách:

SELECT LISTAGG(region_name) 
FROM regions;

Kết quả:

EuropeAmericasAsiaMiddle East and Africa

Sắp xếp kết quả

Chúng ta có thể sử dụng WITHIN GROUP (ORDER BY...) mệnh đề đặt hàng đầu ra của LISTAGG() chức năng:

SELECT LISTAGG(region_name, ',') WITHIN GROUP (ORDER BY region_name ASC) 
FROM regions;

Kết quả:

Americas,Asia,Europe,Middle East and Africa

Sử dụng trong các truy vấn được nhóm

Chúng ta có thể sử dụng LISTAGG() hoạt động trong một truy vấn được nhóm để cung cấp các kết quả như sau:

SELECT 
    region_id,
    LISTAGG(country_id, ', ') WITHIN GROUP (ORDER BY country_id ASC) AS "Countries"
FROM countries
GROUP BY region_id
ORDER BY region_id;

Kết quả:

   REGION_ID                         Countries 
____________ _________________________________ 
           1 BE, CH, DE, DK, FR, IT, NL, UK    
           2 AR, BR, CA, MX, US                
           3 AU, CN, HK, IN, JP, SG            
           4 EG, IL, KW, NG, ZM, ZW           

Chỉ trả lại các giá trị riêng biệt

Chúng tôi có thể sử dụng DISTINCT mệnh đề chỉ trả về các giá trị duy nhất:

SELECT LISTAGG(DISTINCT region_id, ', ') 
FROM regions;

Kết quả:

1, 2, 3, 4

Xem tài liệu của Oracle để biết thêm chi tiết về những gì bạn có thể làm với chức năng này.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Oracle Date TO_CHAR ('Tháng DD, YYYY') có thêm khoảng trắng trong đó

  2. ORA-28001:Mật khẩu đã hết hạn

  3. Nhầm lẫn với Oracle CONNECT BY

  4. dữ liệu listagg sang định dạng có thể sử dụng được?

  5. Làm thế nào để thay đổi cấu trúc bảng trong Oracle?