json_build_object()
di Postgres 9.4 atau lebih baru
Atau jsonb_build_object()
untuk mengembalikan jsonb
.
SELECT value_two, json_agg(json_build_object('value_three', value_three
, 'value_four' , value_four)) AS value_four
FROM mytable
GROUP BY value_two;
Panduan:
Membangun objek JSON dari daftar argumen variadik. Berdasarkan konvensi, daftar argumen terdiri dari kunci dan nilai yang bergantian.
Untuk versi apa pun (termasuk Postgres 9.3)
row_to_json()
dengan ROW
ekspresi akan berhasil:
SELECT value_two
, json_agg(row_to_json((value_three, value_four))) AS value_four
FROM mytable
GROUP BY value_two;
Tapi Anda kehilangan nama kolom asli. Pemeran ke tipe baris terdaftar menghindari itu. (Jenis baris tabel sementara juga berfungsi untuk kueri ad hoc.)
CREATE TYPE foo AS (value_three text, value_four text); -- once in the same session
SELECT value_two
, json_agg(row_to_json((value_three, value_four)::foo)) AS value_four
FROM mytable
GROUP BY value_two;
Atau gunakan subpilih bukannya ROW
ekspresi. Lebih bertele-tele, tetapi tanpa tipe pemeran:
SELECT value_two
, json_agg(row_to_json((SELECT t FROM (SELECT value_three, value_four) t))) AS value_four
FROM mytable
GROUP BY value_two;
Penjelasan lebih lanjut dalam jawaban terkait Craig:
- PostgreSQL 9.2 row_to_json() dengan gabungan bersarang
db<>main biola di sini
sqlfiddle lama