如何计算几个数组中的条目数

时间:2019-02-05 18:34:18

标签: sql postgresql loops

我有两个表:

CREATE TABLE posts (
  post_id int, tags int[]
);

INSERT INTO posts (post_id, tags) VALUES 
(1, '{1, 2, 3}'), (2, '{3, 2, 4, 5, 7}'),
(3, '{6}'), (4, '{1, 7}'),
(5, '{4, 5, 3}'), (6, '{1, 4, 5}'),
(7, '{5, 6, 7}'), (8, '{7, 8}'),
(9, '{4}'), (0, '{3, 7, 8}');

CREATE TABLE tags (
  tag_id int, name varchar
);

INSERT INTO tags (tag_id, name) VALUES
(1, 'HTML'), (2, 'SQL'), (3, 'JS'),
(4, 'C++'), (5, 'Golang'), (6, 'CSS'),
(7, 'Java'), (8, 'Lua');

我需要按引用数量获取前5个(名称,数字)标签。

我熟悉循环,并且可以遍历数组。但是在这种情况下,对于我来说如何将每个数组和整个表的迭代组合在一起并不清楚。

执行此任务的方式是什么?

1 个答案:

答案 0 :(得分:1)

您可以使用unnest()将数组转换为行。剩下的就是join和聚合:

select t.name, count(*)
from posts p cross join
     unnest(tags) tag join
     tags t
     on t.tag_id = tag
group by t.name
order by count(*) desc
fetch first 5 rows only;

Here是db <>小提琴。