2016-09-01 6 views
3

次のように私は、id::intcontent::jsonbではPostgreSQL 9.4を使用して、テーブルtestを持っています:PostgresのGROUP BYは

私は content列に内部フィールド上 GROUP BY行う方法
id |  content 
----+----------------- 
    1 | {"a": {"b": 1}} 
    2 | {"a": {"b": 1}} 
    3 | {"a": {"b": 2}} 
    4 | {"a": {"c": 1}} 

各グループを配列として返しますか?具体的には、私が探しています結果は以下のとおりです。

   content 
--------------------------------- 
[{"a": {"b": 1}},{"a": {"b": 1}}] 
[{"a": {"b": 2}}] 
(2 rows) 

をしよう:

SELECT json_agg(content) as content FROM test GROUP BY content ->> '{a,b}'; 

収量:

       content 
---------------------------------------------------------------------- 
[{"a": {"b": 1}}, {"a": {"b": 1}}, {"a": {"b": 2}}, {"a": {"c": 1}}] 
(1 row) 
+0

あなたの質問を編集し、あなたが探している結果を提供してください。 –

+0

@GordonLinoffおかげさまで、ありがとうございます!私は、質問を改善し、試行し、私の希望の結果を追加しました。 – JGem

答えて

0

右のオペランドがあるときは、->>の代わりに#>>演算子を使用する必要がありますjsonパス。これを試してみてください:

SELECT json_agg(content) as content FROM test GROUP BY content #>> '{a,b}'; 

収量:

   content 
------------------------------------ 
[{"a": {"c": 1}}] 
[{"a": {"b": 2}}] 
[{"a": {"b": 1}}, {"a": {"b": 1}}] 
(3 rows) 
+0

答えに '#>>'を代用するつもりだと思います。 'json_agg(content)をコンテンツとして選択します。GROUP BYコンテンツ# '' {a、b} '; 内容 ------------------------------------ [{"a":{"c" :{"a":{"b":1}} [{"a":{"b":2}} [{"a":{"b":1}} ] (3行) ' これは大変感謝しています!私はこれを答えとして受け入れるでしょう – JGem

+0

おっと、はい、私はそれを修正しました。 – redneb