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

Cara menggunakan array_agg() untuk varchar[]

Fungsi agregat standar array_agg() hanya berfungsi untuk tipe dasar, bukan tipe array sebagai input.(Tapi Postgres 9.5+ memiliki varian baru array_agg() itu bisa!)

Anda dapat menggunakan fungsi agregat khusus array_agg_mult() sebagaimana didefinisikan dalam jawaban terkait ini:
Memilih data ke dalam array Postgres

Buat sekali per database. Maka kueri Anda dapat berfungsi seperti ini:

SELECT use.user_sched_id, array_agg(se.sched_entry_id) AS seids
      ,array_agg_mult(ARRAY[se.min_crew]) AS min_crew_arr
FROM   base.sched_entry se
LEFT   JOIN base.user_sched_entry use USING (sched_entry_id)
WHERE  se.sched_entry_id = ANY(ARRAY[623, 625])
GROUP  BY user_sched_id;

Ada alasan terperinci dalam jawaban yang ditautkan.

Ekstensi harus cocok

Menanggapi komentar Anda, pertimbangkan kutipan ini dari manual tentang tipe array:

Array multidimensi harus memiliki luas yang cocok untuk setiap dimensi. Ketidakcocokan menyebabkan kesalahan.

Tidak ada jalan lain, tipe array tidak mengizinkan ketidakcocokan seperti itu di Postgres. Anda bisa pad array Anda dengan nilai NULL sehingga semua dimensi memiliki luasan yang cocok.

Tapi saya lebih suka menerjemahkan array ke daftar yang dipisahkan koma dengan array_to_string() untuk tujuan kueri ini dan gunakan string_agg() untuk menggabungkan text - sebaiknya dengan pemisah yang berbeda. Menggunakan baris baru dalam contoh saya:

SELECT use.user_sched_id, array_agg(se.sched_entry_id) AS seids
      ,string_agg(array_to_string(se.min_crew, ','), E'\n') AS min_crews
FROM   ...

Menormalkan

Anda mungkin ingin mempertimbangkan untuk menormalkan skema Anda untuk memulai. Biasanya, Anda akan menerapkan hubungan n:m seperti itu dengan tabel terpisah seperti yang diuraikan dalam contoh ini:
Bagaimana cara menerapkan hubungan banyak ke banyak di PostgreSQL?




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Permintaan untuk elemen array di dalam tipe JSON

  2. Pemicu PostgreSQL dan Dasar-dasar Fungsi Tersimpan

  3. Cara Mendapatkan Tanggal Kemarin di PostgreSQL

  4. Menginstal Ekstensi PostgreSQL ke semua skema

  5. cara memperbaiki OperationalError:(psycopg2.OperationalError) server menutup koneksi secara tidak terduga