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

Nối nhiều hàng trong một mảng với SQL trên PostgreSQL

Đây là một Postgres được tích hợp sẵn từ một vài phiên bản nên bạn không cần phải xác định riêng của mình nữa, tên là array_agg() .

test=> select array_agg(n) from generate_series(1,10) n group by n%2;
  array_agg   
--------------
 {1,3,5,7,9}
 {2,4,6,8,10}

(đây là Postgres 8.4.8).

Lưu ý rằng không có ORDER BY được chỉ định, vì vậy thứ tự của các hàng kết quả phụ thuộc vào phương pháp nhóm được sử dụng (ở đây là băm), tức là nó không được xác định. Ví dụ:

test=> select n%2, array_agg(n) from generate_series(1,10) n group by (n%2);
 ?column? |  array_agg   
----------+--------------
        1 | {1,3,5,7,9}
        0 | {2,4,6,8,10}

test=> select (n%2)::TEXT, array_agg(n) from generate_series(1,10) n group by (n%2)::TEXT;
 text |  array_agg   
------+--------------
 0    | {2,4,6,8,10}
 1    | {1,3,5,7,9}

Bây giờ, tôi không biết tại sao bạn nhận được {10,2,4,6,8}{9,7,3,1,5} , vì generate_series() nên gửi các hàng theo thứ tự.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cách xóa các hàng trùng lặp mà không có số nhận dạng duy nhất

  2. Postgres - phiên bản 0.14.0 cuối cùng của pg gem bị lỗi

  3. Cách định dạng số dưới dạng tiền tệ trong PostgreSQL

  4. Cách giám sát hiệu suất PostgreSQL 12 với OmniDB - Phần 2

  5. Có một lần truy cập hiệu suất sử dụng các kiểu dữ liệu thập phân (MySQL / Postgres)