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

标签 sql arrays postgresql group-by count

我有一张 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/

相关文章:

SQL 查询 - 如何检查结果是否是第一个

mysql - 更改 phpmyadmin 中的默认字段

sql - 独家加盟有很多关系

sql - 如何获取由另一列分区的值的第一个实例?

mysql - 引用 MySQL 计算/动态列或子查询

sql - 数据库索引: why pairing

arrays - Cypress 断言是数组中的元素

c - 为什么我的代码有效? C中的数组排序

php - 如何遍历数组以插入数据库

PostgreSQL:返回特定 ID 后的有序行