sql - jsonb 内部字段上的 Postgres GROUP BY

标签 sql json postgresql postgresql-9.4 jsonb

我正在使用 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}}

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

             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)

关于sql - jsonb 内部字段上的 Postgres GROUP BY,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39261409/

相关文章:

sql - 如何在oracle中更新多行

sql - 如何在 CTE 之后使用 if 语句 (SQL Server 2005)

c# - 如何在 c# 中的 postgres db 中设置日期样式

php - 如何在PHP中重用sql查询结果?

postgresql - 多表请求中的 pqxx 列名

sql - 修改 SQL 触发器,使其在插入的表包含多行时起作用

sql - Active Record 通过 id 查找

javascript - 如何将 json 中的自动填充功能与动态创建的输入一起使用?

json - 如何使用 fs.copyTpl 忽略 Yeoman 中的文件

json - 在 Swift 4 中解析包含字符串和 int 的 JSON 数组