web-dev-qa-db-ja.com

Postgres 9.3でのjson_object_agg()の実装

Postgres 9.4のjson_object_agg()関数が必要なようですが、現在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}
_

Postgres 9.4のjson_object_agg()関数はこれを完全に実行すると思います。

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

9.3でこれを行う方法はありますか?ありがとうございました!

9
thomaskeefe

String_agg(9.3で利用可能)を使用してjson_object_aggをエミュレートすることができました。

あなたの例は:

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

Json_object_agg => json_aggの代わりに使用

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