计算varchar数组Postgres中不同元素的数量

和h

我有桌子

title   | tags
--------------------------
post1   | {tag1,tag2,tag3}
post2   | {tag1,tag2}
post3   | {tag1}

它是这样制作的:

CREATE TABLE post (
    title varchar(10),
    tags varchar(10) array[5]
);

INSERT INTO post (title, tags) VALUES ('post1', '{"tag1", "tag2", "tag3"}');
INSERT INTO post (title, tags) VALUES ('post2', '{"tag1", "tag2"}');
INSERT INTO post (title, tags) VALUES ('post3', '{"tag1"}');

如何计算整个表中数组中不同元素的数量?例如,标记tag1出现在所有三行中,因此它将返回3。我想对每个元素都执行此操作,从而创建如下所示的输出:

tag     | COUNT
--------------------------
tag1    | 3
tag2    | 2
tag3    | 1

tags数组将没有任何重复项。

专线小巴

您可以unnest()数组,然后聚合:

select t.tag, count(*) no_posts
from post p
cross join lateral unnest(p.tags) t(tag)
group by t.tag
order by no_posts desc

DB Fiddle上的演示

标签| no_posts 
:- -------:
tag1 | 3
标签2 | 2
标签3 | 1个

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章