Postgres GROUP BY on jsonb inner field

后端 未结 2 1221
终归单人心
终归单人心 2021-01-04 05:23

I am using Postgresql 9.4 and have a table test, with id::int and content::jsonb, as follows:



        
相关标签:
2条回答
  • 2021-01-04 05:51

    You have to use the #>> operator instead of ->> when the right operand is a json path. Try this:

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

    Yields:

                  content
    ------------------------------------
     [{"a": {"c": 1}}]
     [{"a": {"b": 2}}]
     [{"a": {"b": 1}}, {"a": {"b": 1}}]
    (3 rows)
    
    0 讨论(0)
  • 2021-01-04 06:06

    I think json_agg() is not the best choice to use it here, since that is concatenating the content values (the whole json data) into an array for a specific group.
    It makes more sense to use something like this (and I added 'count(*)', just to have a more common scenario):

    SELECT content #>> '{a,b}' as a_b, count(*) as count FROM test GROUP BY content #>> '{a,b}';
    
    0 讨论(0)
提交回复
热议问题