Ich habe das Gefühl, ich brauche die json_object_agg()
Funktion von Postgres 9.4, aber ich kann momentan kein Upgrade von 9.3 durchführen. Gibt es eine Möglichkeit, in 9.3 das zu tun, was ich will? Hier ist mein Szenario. Ich habe eine Datentabelle click_activity
, die aussieht
user | offer | clicks
-----|-------|--------
fred |coupons| 3
fred |cars | 1
john |coupons| 2
Aber ich möchte daraus Folgendes machen: (Aggregation der Aktivität pro Benutzer)
user | activity
-----|----------
fred | {"coupons": 3, "cars": 1}
john | {"coupons": 2}
Ich denke, dass die json_object_agg()
Funktion von Postgres 9.4 dies perfekt machen würde, alles was ich aufrufen müsste wäre
select user, json_object_agg(offer, clicks) from click_activity group by 1
Gibt es eine Möglichkeit, dies in 9.3 zu tun? Vielen Dank!
postgresql
postgresql-9.3
postgresql-9.4
json
thomaskeefe
quelle
quelle
Antworten:
Ich konnte json_object_agg mit string_agg emulieren (verfügbar in 9.3).
Ihr Beispiel wäre:
quelle
to_json
Anruf ersetzt wird :('{' || string_agg(to_json(offer) || ': ' || to_json(clicks), ',') || '}')::json
. Doppelte Anführungszeichen werdenoffer
beim Verketten automatisch um den Wert hinzugefügt .Verwenden Sie insteade von json_object_agg => json_agg
quelle