json_build_object()
i Postgres 9.4 eller nyere
Eller jsonb_build_object()
for at returnere jsonb
.
SELECT value_two, json_agg(json_build_object('value_three', value_three
, 'value_four' , value_four)) AS value_four
FROM mytable
GROUP BY value_two;
Manualen:
Opbygger et JSON-objekt ud fra en variadisk argumentliste. Ifølge konventionen består argumentlisten af skiftende nøgler og værdier.
For enhver version (inkl. Postgres 9.3)
row_to_json()
med en ROW
udtryk ville gøre tricket:
SELECT value_two
, json_agg(row_to_json((value_three, value_four))) AS value_four
FROM mytable
GROUP BY value_two;
Men du mister originale kolonnenavne. Et kast til en registreret rækketype undgår det. (Rækketypen for en midlertidig tabel tjener også til ad hoc-forespørgsler.)
CREATE TYPE foo AS (value_three text, value_four text); -- once in the same session
SELECT value_two
, json_agg(row_to_json((value_three, value_four)::foo)) AS value_four
FROM mytable
GROUP BY value_two;
Eller brug et undervalg i stedet for ROW
udtryk. Mere udførligt, men uden type cast:
SELECT value_two
, json_agg(row_to_json((SELECT t FROM (SELECT value_three, value_four) t))) AS value_four
FROM mytable
GROUP BY value_two;
Mere forklaring i Craigs relaterede svar:
- PostgreSQL 9.2 row_to_json() med indlejrede joinforbindelser
db<>spil her
Gamle sqlfiddle