Saya merasa saya membutuhkan json_object_agg()
fungsi Postgres 9.4 tetapi saya tidak akan dapat memutakhirkan dari 9.3 sekarang. Apakah ada cara untuk melakukan apa yang saya inginkan di 9.3? Inilah skenario saya. Saya memiliki tabel click_activity
data yang terlihat seperti
user | offer | clicks
-----|-------|--------
fred |coupons| 3
fred |cars | 1
john |coupons| 2
Tapi saya ingin mengubahnya menjadi ini: (mengagregasi aktivitas per pengguna)
user | activity
-----|----------
fred | {"coupons": 3, "cars": 1}
john | {"coupons": 2}
Saya pikir json_object_agg()
fungsi Postgres 9.4 akan melakukan ini dengan sempurna, yang harus saya panggil adalah
select user, json_object_agg(offer, clicks) from click_activity group by 1
Apakah ada cara untuk melakukan ini di 9.3? Terima kasih!
postgresql
postgresql-9.3
postgresql-9.4
json
thomaskeefe
sumber
sumber
Jawaban:
Saya dapat meniru json_object_agg menggunakan string_agg (yang tersedia di 9.3).
Contoh Anda adalah:
sumber
to_json
panggilan:('{' || string_agg(to_json(offer) || ': ' || to_json(clicks), ',') || '}')::json
. Kutipan ganda ditambahkan secara otomatis di sekitaroffer
nilai ketika menggabungkannya.Gunakan insteade dari json_object_agg => json_agg
sumber