Postgres内でクエリ結果をJSONオブジェクトに変換する方法 質問する

Postgres内でクエリ結果をJSONオブジェクトに変換する方法 質問する

簡単なクエリを実行すると、SELECT name, grp FROM things;次の表が生成されます。

 name | grp 
------+-----
 a    | y
 b    | x
 c    | x
 d    | z
 e    | z
 f    | z

最終的に、次の単一の JSON オブジェクトを作成します。

 {y: [a], x: [b,c], z: [d,e,f]}

「名前」が配列に凝縮された 3 つの行を返すクエリの方が近づいたように感じますSELECT grp, array_agg(name) as names FROM things GROUP BY grp;が、行を単一の JSON オブジェクトに凝縮するには、ここからどこに行けばよいかわかりません。

SELECT json_build_object(grp, array_agg(name)) as objects FROM things GROUP BY grp;は、 のような個々の JSON オブジェクトの単一列の結果となるため、わずかに近づきます{y: [a]}が、それらは依然として個別のオブジェクトであるため、正しいパスではない可能性があります。

これはPostgresql 9.4を使用しています。

ベストアンサー1

ここで重要なのは、他の json 関数と一緒にリストされていない json_object_agg 関数のようです。

見る:http://www.postgresql.org/docs/9.4/static/functions-aggregate.html

次のクエリを実行すると、まさに私が探しているものが見つかります。

SELECT json_object_agg(each.grp, each.names) FROM (
    SELECT grp, array_agg(name) as names FROM things GROUP BY grp
) AS each;

おすすめ記事