PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Gabungkan beberapa baris dalam array dengan SQL di PostgreSQL

Ini adalah Postgres bawaan sejak beberapa versi sehingga Anda tidak perlu lagi menentukan sendiri, namanya 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}

(ini adalah Postgres 8.4.8).

Perhatikan bahwa tidak ada ORDER BY ditentukan, sehingga urutan baris hasil tergantung pada metode pengelompokan yang digunakan (di sini, hash) yaitu, tidak ditentukan. Contoh:

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}

Sekarang, saya tidak tahu mengapa Anda mendapatkan {10,2,4,6,8} dan {9,7,3,1,5} , karena generate_series() harus mengirim baris secara berurutan.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Optimalisasi kueri Postgres (memaksa pemindaian indeks)

  2. PSQLException:transaksi saat ini dibatalkan, perintah diabaikan hingga akhir blok transaksi

  3. Rel metode yang tidak ditentukan untuk ActiveRecord_Associations_CollectionProxy

  4. Cara memfilter hasil kueri di PostgreSQL

  5. Ubah tipe data kolom menjadi serial