json_build_object()
Postgres9.4以降
またはjsonb_build_object()
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;
マニュアル:
可変引数リストからJSONオブジェクトを構築します。慣例により、引数リストは交互のキーと値で構成されます。
すべてのバージョン(Postgres 9.3を含む)
row_to_json()
ROW
を使用 式はトリックを行います:
SELECT value_two
, json_agg(row_to_json((value_three, value_four))) AS value_four
FROM mytable
GROUP BY value_two;
ただし、元の列名は失われます。登録された行タイプへのキャストはそれを回避します。 (一時テーブルの行タイプは、アドホッククエリにも使用されます。)
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;
または、副選択を使用します ROW
の代わりに 表現。より冗長ですが、型キャストはありません:
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;
クレイグの関連する回答の詳細:
- ネストされた結合を使用したPostgreSQL9.2row_to_json()
db<>ここでフィドル
古いsqlfiddle