Arrays jsonb数组中跨多行的PostgreSQL计数结果

Arrays jsonb数组中跨多行的PostgreSQL计数结果,arrays,json,database,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"]}'); 请注意,好友的值可以多次包含相同的值。这将在以后相关(在本例中,第二个值在键

正如标题中所述,我需要返回数组中的出现次数,即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”出现在键“Friends”的j(jsonb)列中的次数;在这种情况下,我要寻找的最终结果是整数3。当术语“条形图”在两行中出现3次时

我现在的位置:

目前我已经编写了sql,它返回一个文本数组,其中包含单个一维数组中的所有friends值(来自多个选定行)。该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
  • 有问题的表格和上面的索引

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

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

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