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.
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:
- Chọn dữ liệu vào một mảng Postgres
- Có cái gì đó giống như một hàm zip () trong PostgreSQL kết hợp hai mảng không?