首页 文章

PostgreSQL计数跨越多行的jsonb数组

提问于
浏览
1

正如 Headers 中所述,我处于一种情况,我需要返回一个数组中的出现次数,即在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"两次 . )

Question:

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

Where I'm at:

目前我编写了sql,它返回一个文本数组,其中包含单个1维数组中的所有朋友值(来自多个选定的行) . 那个sql如下

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

屈服结果如下:

jsonb_array_elements_text                                                  
-------------------------
foo
bar
baz
bar
bar
  • 鉴于这是一个数组,是否有可能以某种方式用术语_1130227过滤它以获得它出现次数的计数?或者我离开的方法是什么?

Other Details:

  • 版本:psql(PostgreSQL)9.5.2

  • 有问题的表和它上面的杜松子酒索引 .

如果需要任何其他信息,请提前告知我们 .

1 回答

  • 2

    您需要将函数的结果用作正确的表,然后您可以轻松计算值出现的次数 .

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

相关问题