Postgresql

在 Postgres 9.3 中實現 json_object_agg()

  • October 7, 2018

我覺得我需要json_object_agg()Postgres 9.4 的功能,但我現在無法從 9.3 升級。有沒有辦法在 9.3 中做我想做的事?這是我的場景。我有一個click_activity看起來像的數據表

user | offer | clicks
-----|-------|--------
fred |coupons| 3
fred |cars   | 1
john |coupons| 2

但我想把它變成這樣:(聚合每個使用者的活動)

user | activity
-----|----------
fred | {"coupons": 3, "cars": 1}
john | {"coupons": 2}

我認為json_object_agg()Postgres 9.4 的功能可以完美地做到這一點,我只需要呼叫

select user, json_object_agg(offer, clicks) from click_activity group by 1

有沒有辦法在 9.3 中做到這一點?謝謝!

我能夠使用 string_agg(在 9.3 中可用)來模擬 json_object_agg。

你的例子是:

select user, ('{' || string_agg('"' || offer || '": ' || clicks, ',') || '}')::json as activity 
from click_activity 
group by user

使用代替 json_object_agg => json_agg

select user, json_agg((offer, clicks)) from click_activity group by 1

引用自:https://dba.stackexchange.com/questions/100607