我有一张 table 。
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
<强> Demo on DB Fiddle :
tag | no_posts :--- | -------: tag1 | 3 tag2 | 2 tag3 | 1
关于sql - 计算 varchar 数组中不同元素的数量 Postgres,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61469394/