Postgresql: Agregat objek ke dalam array (json) (masalah subquery)

8

Saya minta maaf untuk judul yang tidak jelas, tetapi saya tidak tahu kata-kata yang tepat untuk menggambarkan ini.

Saya memiliki kueri ini yang mengubah sekelompok kolom menjadi objek yang berfungsi dengan baik:

SELECT row_to_json(t) FROM ( SELECT type, properties, geometry FROM "bgbCargoMinardJSON" ) t

Namun, saya ingin mengelompokkan objek yang termasuk dalam kategori tertentu ke dalam array. Kategori ini didefinisikan oleh kolom keempat di dalam meja saya yang bernama "cargoProductId". Array harus memiliki nilai "cargoProductId" sebagai kuncinya. Begitu:

"961":[ {"type":"Feature",.... {"type":"Feature",.... {"type":"Feature",.... ], "962":[ ..... ]

Jadi saya sudah berjuang dengan ini selama 1 1/2 jam terakhir atau lebih. Saya benar-benar tidak tahu bagaimana melakukan ini. Inilah yang saya miliki sekarang:

SELECT array_agg(row_to_json(t)) FROM ( SELECT type, properties, geometry FROM "bgbCargoMinardJSON" ) t) FROM "bgbCargoMinardJSON" GROUP BY "carProductId"

ervazu
sumber

Jawaban:

9

Jika Anda menggunakan 9,4 sesuatu seperti ini mungkin adalah apa yang Anda cari:

select json_object(array_agg(id)::text[],array_agg(rw)::text[])
from( select id
           , ( select to_json(array_agg(row_to_json(t)))
               from (select typ,prop from bgb where id=b.id) t ) rw
      from bgb b
      group by id ) z;
Jack mengatakan coba topanswers.xyz
sumber
Jack terima kasih! Formasi bijaksana itu berhasil! Satu-satunya masalah yang saya miliki adalah bahwa itu tidak memberikan json yang valid (baik secara teknis memang). Ada teks ini untuk konversi json terjadi seperti: {"3565": "[{\"type\":Saya memiliki tanda kutip sebelum setiap tanda kurung dan garis miring sebelum setiap tanda tanda kutip. Saya memiliki ini sebelumnya dan selalu ada sesuatu dengan tipe data. Bagaimanapun kebenarannya, saya tidak sepenuhnya memahami dan bagaimana kueri yang Anda tulis bekerja, dan karena itu saya tidak benar-benar tahu di mana dan bagaimana cara memperbaikinya.
ervazu
Ini mungkin bukan solusi terbaik, tapi saya hanya menggunakan fungsi ganti untuk memperbaikinya. Sekali lagi terima kasih atas waktu Anda!
ervazu
1
ini berhasil untuk kasus saya:json_agg(to_json(items.*)) as "items"
ricka