json_build_object()
v Postgres 9.4 nebo novější
Nebo jsonb_build_object()
vrátíte 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;
Manuál:
Sestaví objekt JSON ze seznamu variadických argumentů. Podle konvence se seznam argumentů skládá ze střídajících se klíčů a hodnot.
Pro jakoukoli verzi (včetně Postgres 9.3)
row_to_json()
s ROW
výraz by stačil:
SELECT value_two
, json_agg(row_to_json((value_three, value_four))) AS value_four
FROM mytable
GROUP BY value_two;
Ale ztratíte původní názvy sloupců. Přetypování na registrovaný typ řádku tomu zabrání. (Řádkový typ dočasné tabulky slouží i pro ad hoc dotazy.)
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;
Nebo použijte podvýběr místo ROW
výraz. Podrobnější, ale bez přetypování:
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;
Další vysvětlení v Craigově související odpovědi:
- PostgreSQL 9.2 row_to_json() s vnořenými spojeními
db<>zde hrajte
Starý sqlfiddle