Ho una tabella temp
definito così:Come impostare i nomi degli attributi corretti su un risultato aggregato json con la clausola GROUP BY?
id | name | body | group_id
-------------------------------
1 | test_1 | body_1 | 1
2 | test_2 | body_2 | 1
3 | test_3 | body_3 | 2
4 | test_4 | body_4 | 2
desidero produrre un risultato raggruppati per group_id
e aggregati a json. Tuttavia, query come questa:
SELECT group_id, json_agg(ROW(id, name, body)) FROM temp
GROUP BY group_id;
Produce questo risultato:
1;[{"f1":1,"f2":"test_1","f3":"body_1"},
{"f1":2,"f2":"test_2","f3":"body_2"}]
2;[{"f1":3,"f2":"test_3","f3":"body_3"},
{"f1":4,"f2":"test_4","f3":"body_4"}]
Gli attributi negli oggetti JSON sono chiamati f1
, f2
, f3
invece di id
, name
, body
come richiesto. So che è possibile alias correttamente utilizzando un subquery o di un'espressione di tabella comune, per esempio come questo:
SELECT json_agg(r.*) FROM (
SELECT id, name, body FROM temp
) r;
che produce questo risultato:
[{"id":1,"name":"test_1","body":"body_1"},
{"id":2,"name":"test_2","body":"body_2"},
{"id":3,"name":"test_3","body":"body_3"},
{"id":4,"name":"test_4","body":"body_4"}]
ma onestamente non vedo in qualsiasi modo come usarlo in combinazione con l'aggregazione. Cosa mi manca?
Non proprio elegante ma sembra abbastanza semplice, in realtà troppo semplice per me anche considerare questo in primo luogo, grazie! – Przemek