arrays - PostgreSQL 跨多行计算 jsonb 数组中的结果

标签 arrays json database postgresql jsonb

如标题中所述,我遇到的情况是需要返回数组(即 jsonb 列内)的出现次数。伪示例如下:

CREATE TABLE users (id int primary key, tags jsonb);
INSERT INTO users (id, j) VALUES
(1, '{"Friends": ["foo", "bar", "baz"]}'),
(2, '{"Friends": ["bar", "bar"]}');
  • 请注意,好友的值可以多次包含相同的值。这将在稍后相关(在这种情况下,第二个值包含在键“Friends”下的 jsonb 列中两次包含名称“bar”。)

问题:

对于上面的示例,如果我要搜索值“bar”(给定一个我需要帮助解决的查询),我想要“bar”出现在 j (jsonb) 列中的次数键“ friend ”;在这种情况下,我要寻找的最终结果是整数 3。因为术语“bar”在 2 行中出现 3 次。

我在哪里:

目前我已经编写了sql,它返回一个文本数组,其中包含单个一维数组中的所有 friend 值(来自多个选定的行)。该sql如下

SELECT jsonb_array_elements_text(j->'Friends') FROM users;

生成结果如下:

jsonb_array_elements_text                                                  
-------------------------
foo
bar
baz
bar
bar
  • 鉴于这是一个数组,是否可以通过术语“bar”以某种方式对其进行过滤,以获得它出现的次数?还是我的方法离我太远了?

其他详细信息:

  • 版本:psql (PostgreSQL) 9.5.2
  • 相关表格及其上的 Gin 索引。

如果需要任何其他信息,请告诉我,提前致谢。

最佳答案

您需要将函数的结果用作适当的表格,然后您可以轻松计算该值出现的次数。

select count(x.val)
from users
  cross join lateral jsonb_array_elements_text(tags->'Friends') as x(val)
where x.val = 'bar'

关于arrays - PostgreSQL 跨多行计算 jsonb 数组中的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40292632/

相关文章:

javascript - 一个对象如何从对象列表中分组并仅收集明确引用的特定值,每个值都通过其键?

c - 输入后 Char 指针(字符串)数组崩溃?

Java - Hibernate3 JAR 源附件

html - 如何在Notepad++中使用regex(正则表达式)删除所有不包含特定字符串的HTML和JSON代码?

java - 将整数表 - int[] - 插入 SQLite 数据库,

c - 如何在 C 中将逗号分隔的字符串转换为字符串数组

json - 使用 post 方法将新数据添加到服务器不起作用。使用 Reactjs 和 Nodejs

mongodb - 在 Mongodb 中,如何检查所有文档的值是否都是唯一的?

mysql - 创建MySQL表列什么时候写NOT NULL

ios - iOS 应用程序中的 SQLITE_BUSY 错误