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

PostgreSQL 9.1:Cách nối các hàng trong mảng mà không có bản sao, THAM GIA một bảng khác

Thay vì sử dụng các chức năng cửa sổ và phân trang, hãy sử dụng GROUP BY ở cấp độ truy vấn và tổng hợp bằng mệnh đề DISTINCT:

SELECT         
  rnp.grp_id,
  array_to_string(array_agg(distinct rnp.cabinets),',') AS cabinets,
  array_to_string(array_agg(distinct ips.address),',')  AS addresses
FROM rnp JOIN ips ON rnp.grp_id=ips.grp_id GROUP BY rnp.grp_id, ips.grp_id;

Kết quả:

 grp_id |        cabinets         | addresses 
--------+-------------------------+-----------
     11 | cabs1,cabs2,cabs3,cabs4 | CA,NY
     22 | c1,c2                   | DC,LA
(2 rows)

Chìa khóa ở đây là thay vì sử dụng các chức năng cửa sổ và phân lớp, bạn sử dụng GROUP BY cấp truy vấn và tổng hợp bằng DISTINCT mệnh đề.

Điều này cũng sẽ hoạt động với phương pháp tiếp cận hàm cửa sổ, ngoại trừ PostgreSQL (ít nhất là 9.1) không hỗ trợ DISTINCT trong các chức năng cửa sổ:

regress=# SELECT DISTINCT
  rnp.grp_id,
  array_to_string(array_agg(distinct rnp.cabinets)OVER (PARTITION BY rnp.grp_id), ',') AS cabinets,                    
  array_to_string(array_agg(distinct ips.address) OVER (PARTITION BY ips.grp_id), ',') AS addresses
FROM rnp JOIN ips ON rnp.grp_id=ips.grp_id;
ERROR:  DISTINCT is not implemented for window functions
LINE 3:   array_to_string(array_agg(distinct rnp.cabinets)OVER (PART...



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Java - ngày được lưu như một ngày trước đó

  2. Không tìm thấy ngôn ngữ thủ tục PostgreSQL C

  3. Đơn giản hóa trường hợp lồng nhau khi câu lệnh

  4. Làm thế nào để tạo tìm kiếm mờ đơn giản chỉ với PostgreSQL?

  5. Dữ liệu dự phòng trong báo cáo cập nhật