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

Tổng hợp tất cả các giá trị không trong cùng một nhóm

Trong Postgres 11 trở lên, sử dụng cửa sổ chức năng với khung tùy chỉnh và frame_exclusion :

SELECT *, array_combine(values) OVER (ROWS BETWEEN UNBOUNDED PRECEDING
                                           AND UNBOUNDED FOLLOWING
                                           EXCLUDE CURRENT ROW) AS agg_values
FROM   tbl;

Nếu name không phải là UNIQUE và kể từ khi bạn hỏi:

SELECT *, array_combine(values) OVER (ORDER BY name
                                      ROWS BETWEEN UNBOUNDED PRECEDING
                                           AND UNBOUNDED FOLLOWING
                                           EXCLUDE GROUP) AS agg_values
FROM   tbl;

db <> fiddle tại đây

Cái đầu tiên (cũng) hoạt động với thứ tự các hàng tùy ý, chỉ loại trừ hàng hiện tại. Thứ hai yêu cầu ORDER BY để xác định những hàng nào trong cùng một nhóm.

Hướng dẫn:

Nhấn mạnh đậm của tôi.

Điều này sử dụng hàm tổng hợp tùy chỉnh array_combine(anyarray) do a_horse cung cấp .
Hoặc tại đâ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. Docker Compose + Spring Boot + kết nối Postgres

  2. Lỗi:Cột không tồn tại

  3. Truy vấn PostgreSQL với Npgsql và Entity Framework bằng cách sử dụng unaccent

  4. nhà cung cấp cho PostgreSQL trong .net với sự hỗ trợ cho TransactionScope

  5. Kiểm tra xem cột bảng có tồn tại trong cơ sở dữ liệu hay không bằng cách sử dụng SQLAlchemy và Alembic