J'ai l'impression d'avoir besoin de la json_object_agg()
fonction de Postgres 9.4 mais je ne pourrai pas mettre à jour à partir de 9.3 pour le moment. Existe-t-il un moyen de faire ce que je veux en 9.3? Voici mon scénario. J'ai un tableau click_activity
de données qui ressemble à
user | offer | clicks
-----|-------|--------
fred |coupons| 3
fred |cars | 1
john |coupons| 2
Mais je veux le transformer en ceci: (agréger l'activité par utilisateur)
user | activity
-----|----------
fred | {"coupons": 3, "cars": 1}
john | {"coupons": 2}
Je pense que la json_object_agg()
fonction de Postgres 9.4 le ferait parfaitement, tout ce que j'aurais à appeler c'est
select user, json_object_agg(offer, clicks) from click_activity group by 1
Existe-t-il un moyen de le faire en 9.3? Je vous remercie!
postgresql
postgresql-9.3
postgresql-9.4
json
thomaskeefe
la source
la source
Réponses:
J'ai pu émuler json_object_agg en utilisant string_agg (qui est disponible en 9.3).
Votre exemple serait:
la source
to_json
appel:('{' || string_agg(to_json(offer) || ': ' || to_json(clicks), ',') || '}')::json
. Des guillemets sont ajoutés automatiquement autour de laoffer
valeur lors de la concaténation.Utilisez au lieu de json_object_agg => json_agg
la source