postgresql Postgres中的列类型数组计数和连接

8ulbf1ek  于 2023-02-12  发布在  PostgreSQL
关注(0)|答案(2)|浏览(129)

我的Postgres DB(v14)中有两个表,标签和位置。
标签示例:

id | tag_name      
----+------------
 1  | football
 2  | tennis
 3  | athletics
 4  | concert

位置示例(其中tag_ids是int数组):

id | name         | tag_ids      
----+--------------+------------
 1  | Wimbledon    | {2}
 2  | Wembley      | {1,4}
 3  | Letzigrund   | {3,4}

如何找到标记的名称以及它们被使用了多少次?查询结果应该如下所示:

tag_name   | count   
------------+-------
 football   | 1
 tennis     | 1
 athletics  | 1 
 concert    | 2
p5cysglq

p5cysglq1#

您可以使用联接和GROUP BY执行此操作:

select t.tag_name, count(*)
from tags t
  join locations l on t.id = any(l.tag_ids)
group by t.tag_name
order by t.tag_name;
8zzbczxx

8zzbczxx2#

首先将locations展平为t CTE,然后与tags连接。

with t as
(
 select id, name, unnest(tag_ids) as tag_id from locations
 -- not all columns are needed, for illustration only
)
select tag_name, count(*) as count
from tags join t on t.tag_id = tags.id
group by tag_name;

参见demo

相关问题