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

Sql 计算varchar数组Postgres中不同元素的数量,sql,arrays,postgresql,group-by,count,Sql,Arrays,Postgresql,Group By,Count,我有一张桌子 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

我有一张桌子

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
标记
数组将不会有任何重复项。

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

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

tag | no_posts :--- | -------: tag1 | 3 tag2 | 2 tag3 | 1 标记|无|柱 :--- | -------: tag1 | 3 tag2 | 2 tag3 | 1