当前位置: 首页 > 面试题库 >

jsonb内部字段上的Postgres GROUP BY

宁锐
2023-03-14
问题内容

我正在使用Postgresql 9.4,并具有一个表test,带有id::intcontent::jsonb,如下所示:

 id |     content
----+-----------------
  1 | {"a": {"b": 1}}
  2 | {"a": {"b": 1}}
  3 | {"a": {"b": 2}}
  4 | {"a": {"c": 1}}

如何GROUP BYcontent列的内部字段上将每个组作为数组返回?具体来说,我正在寻找的结果是:

             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)

问题答案:

您必须使用#>>运算符,而不是->>在正确的操作数是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)


 类似资料:
  • 我正在通过Postgres Jsonb留档,但无法找到一个小问题的解决方案,我有。 我有一张桌子:MY_TABLE 具有以下列: 用户、姓名、数据和购买 需要注意的是,“数据”是一个jsonb,有多个字段。“Data”中的一个字段是“Attribute”,但它当前是一个字符串。我如何才能将其更改为字符串列表? 我曾尝试使用json\u build\u数组,但没有任何运气 例如,我希望我的jsonb

  • 我正在使用(https://github.com/typeorm/typeorm)作为ORM库来连接postgresql数据库。我将几列保存为类型。现在我需要支持部分更新json数据,例如, 如果我只更新,我不想在更新语句中覆盖lastName。支持,我可以使用它来部分更新字段,但我如何使它与图书一起工作?

  • 我有一张相对较小的桌子(约5万行)。当我选择所有记录时,需要大约40秒。该表有3个JSONB列。当我选择除JSONB之外的每一列时,查询大约需要700ms。 如果我只添加一个JSONB字段,查询时间会跳到近10秒。 我从来没有使用where子句引用JSONB中的内容,只是选择*。尽管如此,我还是尝试添加GIN索引,因为我经常看到它们被提到是JSONB的性能提升器。 我已经运行了一个完全真空。 Po

  • 问题内容: 在Postgresql 9.5中,是否可以重命名jsonb字段中的属性? 例如: 应该重命名为 问题答案: 在使用删除( - )并连接(||)运算符 ,如:

  • 给定以下JSON,它作为jsonb存储在postgres表中: 我有一个工作查询来搜索JSON文档中是否存在值: 但是,当我试图在JPARepository上使用本机查询在Spring-Data-JPA中复制这个查询时,我总是得到以下异常: 还是什么都不起作用。JPA实体如下所示: 涉及该实体的其他查询可以很好地使用绑定到MyJson实体的jsonb字段。有没有办法让这起作用?

  • 我是JSON的新手,与我研究过的任何其他解析方法相比,我喜欢GSON Api的强大和直截了当。 我想解析一个相当复杂的JSON(使用GSON),就结构而言,它类似于下面的JSON: 我哪里出了问题? 是否有一种创建我所缺少的类的特殊方法? 注意:从结构的角度来看,我的JSON对象是完全有效的。如果您看到任何错误,这可能是因为当我手动创建上面的虚拟/演示时,它们出现了滑动。