Postgresql:オブジェクトを(json)配列に集約します(サブクエリの問題)


8

あいまいなタイトルで申し訳ありませんが、これを説明する適切な言葉がわかりません。

一連の列を適切に機能するオブジェクトに変換する次のクエリがあります。

SELECT row_to_json(t) FROM ( SELECT type, properties, geometry FROM "bgbCargoMinardJSON" ) t

ただし、特定のカテゴリに含まれるオブジェクトを配列にグループ化したいと考えています。このカテゴリは、「cargoProductId」という名前のテーブル内の4番目の列によって定義されます。配列には、キーとして「cargoProductId」の値が必要です。そう:

"961":[ {"type":"Feature",.... {"type":"Feature",.... {"type":"Feature",.... ], "962":[ ..... ]

だから私はこれと最後の1時間半ほど苦労してきました。私にはこれを行う方法の手がかりは本当にありません。これは私が今持っているものです:

SELECT array_agg(row_to_json(t)) FROM ( SELECT type, properties, geometry FROM "bgbCargoMinardJSON" ) t) FROM "bgbCargoMinardJSON" GROUP BY "carProductId"

回答:


9

9.4を使用している場合、次のようなものになるでしょう。

select json_object(array_agg(id)::text[],array_agg(rw)::text[])
from( select id
           , ( select to_json(array_agg(row_to_json(t)))
               from (select typ,prop from bgb where id=b.id) t ) rw
      from bgb b
      group by id ) z;

ジャック、ありがとう!フォーメーションは賢明でした!私が持っている唯一の問題は、有効なjsonを提供しないことです(技術的にはそうです)。次のようなjson変換へのこのテキストがあります:{"3565": "[{\"type\":すべての括弧の前にアポストロフィがあり、すべてのアポストロフィの前にスラッシュがあります。私はこれを以前に持っていて、それは常にデータ型に関するものです。どんなに真実が言われても、私はあなたが書いたクエリがどのように機能するかを完全に理解していないので、これをどこでどのように修正するのか本当にわかりません。
ervazu 2015年

これはおそらく最良の解決策ではありませんが、私は単にreplace関数を使用してこれを修正しました。あなたの時間をもう一度ありがとう!
ervazu

1
これは私のケースでjson_agg(to_json(items.*)) as "items"
うまくいきました
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.