Siento que necesito la json_object_agg()
función de Postgres 9.4 pero no podré actualizar desde 9.3 en este momento. ¿Hay alguna manera de hacer lo que quiero en 9.3? Aquí está mi escenario. Tengo una tabla click_activity
de datos que se parece a
user | offer | clicks
-----|-------|--------
fred |coupons| 3
fred |cars | 1
john |coupons| 2
Pero quiero convertirlo en esto: (agregue la actividad por usuario)
user | activity
-----|----------
fred | {"coupons": 3, "cars": 1}
john | {"coupons": 2}
Creo que la json_object_agg()
función de Postgres 9.4 haría esto perfectamente, todo lo que tendría que llamar es
select user, json_object_agg(offer, clicks) from click_activity group by 1
¿Hay alguna manera de hacer esto en 9.3? ¡Gracias!
postgresql
postgresql-9.3
postgresql-9.4
json
Thomaskeefe
fuente
fuente
Respuestas:
Pude emular json_object_agg usando string_agg (que está disponible en 9.3).
Tu ejemplo sería:
fuente
to_json
llamada:('{' || string_agg(to_json(offer) || ': ' || to_json(clicks), ',') || '}')::json
. Las comillas dobles se agregan automáticamente alrededor deloffer
valor al concatenarlo.Use insteade de json_object_agg => json_agg
fuente