Giải pháp chung cho bất kỳ số mảng nào với bất kỳ số phần tử nào. Các phần tử riêng lẻ hoặc toàn bộ mảng cũng có thể là NULL:
Đơn giản hơn ở phiên bản 9.4+ bằng cách sử dụng WITH ORDINALITY
SELECT ARRAY (
SELECT sum(elem)
FROM tbl t
, unnest(t.arr) WITH ORDINALITY x(elem, rn)
GROUP BY rn
ORDER BY rn
);
Xem:
Postgres 9.3+
Điều này sử dụng LATERAL JOIN
ngầm
SELECT ARRAY (
SELECT sum(arr[rn])
FROM tbl t
, generate_subscripts(t.arr, 1) AS rn
GROUP BY rn
ORDER BY rn
);
Xem:
Postgres 9.1
SELECT ARRAY (
SELECT sum(arr[rn])
FROM (
SELECT arr, generate_subscripts(arr, 1) AS rn
FROM tbl t
) sub
GROUP BY rn
ORDER BY rn
);
Tương tự hoạt động trong các phiên bản mới hơn, nhưng chức năng đặt-trả lại trong SELECT
danh sách không phải là SQL tiêu chuẩn và đã bị một số người khó chịu. Tuy nhiên, sẽ ổn kể từ Postgres 10. Xem:
db <> fiddle tại đây
sqlfiddle
cũ
Có liên quan: