Я чувствую, что мне нужна 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? Спасибо!
postgresql
postgresql-9.3
postgresql-9.4
json
thomaskeefe
источник
источник
Ответы:
Я был в состоянии эмулировать json_object_agg, используя string_agg (который доступен в 9.3).
Ваш пример будет:
источник
to_json
вызовом:('{' || string_agg(to_json(offer) || ': ' || to_json(clicks), ',') || '}')::json
. Двойные кавычки автоматически добавляются вокругoffer
значения при его объединении.Используйте вместо json_object_agg => json_agg
источник