簡単なクエリを実行すると、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;