Mam tabeli temp
zdefiniowany następująco:Jak ustawić poprawne nazwy atrybutów do zagregowanego wyniku json z klauzulą 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
chciałbym produkować wynik spis group_id
i zagregowane do JSON. Jednak kwerendy tak:
SELECT group_id, json_agg(ROW(id, name, body)) FROM temp
GROUP BY group_id;
Produkuje ten wynik:
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"}]
atrybuty w obiektach json są nazwane f1
, f2
, f3
zamiast id
, name
, body
wymagane. Wiem, że to jest możliwe do aliasu je prawidłowo za pomocą podzapytania lub wspólnego wyrażenia tabeli, na przykład tak:
SELECT json_agg(r.*) FROM (
SELECT id, name, body FROM temp
) r;
która produkuje ten wynik:
[{"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"}]
Ale szczerze mówiąc nie widzę jakikolwiek sposób użycia go w połączeniu z agregacją. czego mi brakuje?
Niezbyt elegancka, ale wygląda na dość prostą, w gruncie rzeczy zbyt prosta, aby nawet ją rozważyć, dzięki! – Przemek