正如标题中所述,我处于一种情况,我需要返回一个数组内的出现次数,即在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"]}');
问题:
对于上面的示例,如果我要搜索值“bar”(给定一个我需要帮助解决的查询),我希望“bar”出现在j(jsonb)列中的次数关键“朋友”;在这种情况下,我要寻找的最终结果是整数3.因为术语“bar”在2行中出现3次。
我在哪里:
目前我编写了sql,它返回一个文本数组,其中包含单个1维数组中的所有朋友值(来自多个选定的行)。那个sql如下
SELECT jsonb_array_elements_text(j->'Friends') FROM users;
产生的结果如下:
jsonb_array_elements_text
-------------------------
foo
bar
baz
bar
bar
其他详情:
如果需要任何其他信息,请提前告知我们。
答案 0 :(得分:2)
您需要将函数的结果用作正确的表格,然后您可以轻松计算值出现的次数。
select count(x.val)
from users
cross join lateral jsonb_array_elements_text(tags->'Friends') as x(val)
where x.val = 'bar'