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