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

Làm thế nào để chọn mảng 1d từ mảng 2d?

Để có được lát đầu tiên của một mảng:

SELECT my_arr[1:1];

Mảng kết quả có kích thước mảng giống nhau làm đầu vào.
Chi tiết trong câu trả lời trước đây của tôi tại đây:

  • Mảng không tốt nhất theo một cấp độ

Để làm phẳng kết quả:

SELECT ARRAY(SELECT unnest(my_arr[1:1]));

Hoặc sạch hơn:

SELECT ARRAY(SELECT * FROM unnest(my_arr)[1:1]));

Ví dụ

SELECT (ARRAY[[1,2,3], [4,5,6], [7,8,9]])[1:1];

Kết quả:

{{1,2,3}}  -- 2D array

Hoặc:

SELECT ARRAY(
   SELECT unnest((ARRAY[[1,2,3], [4,5,6], [7,8,9]])[1:1])
   );

Kết quả:

{1,2,3}  -- 1D array

Giả lập unnest() trong Postgres 8.3

Phản hồi cho nhận xét của bạn:
Trang Wiki mà bạn đang liên kết đến có một chút sai lệch. Tôi đã cập nhật nó bằng mã cho mảng 2 chiều.

unnest() cho mảng 1 chiều:

CREATE OR REPLACE FUNCTION unnest_1d(anyarray)
  RETURNS SETOF anyelement AS
$func$
SELECT $1[i]
FROM   generate_series(array_lower($1,1), array_upper($1,1)) i
$func$  LANGUAGE sql IMMUTABLE;

unnest() cho mảng 2 chiều:

CREATE OR REPLACE FUNCTION unnest_2d(anyarray)
  RETURNS SETOF anyelement AS
$func$
SELECT $1[d1][d2]
FROM   generate_series(array_lower($1,1), array_upper($1,1)) d1
    ,  generate_series(array_lower($1,2), array_upper($1,2)) d2
$func$  LANGUAGE sql IMMUTABLE;

Hàm tổng hợp array_agg() không được cài đặt theo mặc định trong Postgres 8.3:

CREATE AGGREGATE array_agg(anyelement) (
 SFUNC = array_append,
 STYPE = anyarray,
 INITCOND = '{}'
);

Bỏ kết hợp mảng 2d thành mảng 1d:

CREATE OR REPLACE FUNCTION unnest_2d_1d(anyarray)
  RETURNS SETOF anyarray AS
$func$
SELECT array_agg($1[d1][d2])
FROM   generate_series(array_lower($1,1), array_upper($1,1)) d1
    ,  generate_series(array_lower($1,2), array_upper($1,2)) d2
GROUP  BY d1
ORDER  BY d1
$func$  LANGUAGE sql IMMUTABLE;

SQL Fiddle.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Ghi nhật ký kiểm tra cho PostgreSQL

  2. Sắp xếp truy vấn chậm theo cột trong bảng đã nối

  3. Khai thác tối đa chỉ mục PostgreSQL của bạn

  4. PostgreSQL date () với múi giờ

  5. Hàm GREATEST () trong PostgreSQL