首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Postgres中按数组列对结果进行分组?

如何在Postgres中按数组列对结果进行分组?
EN

Stack Overflow用户
提问于 2015-11-02 09:48:25
回答 2查看 11.9K关注 0票数 23

我有这么一张桌子

代码语言:javascript
复制
id SERIAL,
user_id INT,
community_id INT[],

这张桌子是这样填满的:

代码语言:javascript
复制
id | user_id | community_id 
1  |  1      |   {2, 4}
2  |  5      |   {2, 5} 
3  |  10     |   {2, 4}

我想了解每个社区的用户数量,community_id是数组用户,因为用户可以同时在几个社区中。

查询应该很简单,因为:

代码语言:javascript
复制
SELECT community_id, COUNT(user_id) FROM tbl GROUP BY community_id

结果应该是这样:

代码语言:javascript
复制
community_id  | user_count
2             |  3
4             |  2
5             |  1

我不知道如何使用GROUP BY数组列。有人能帮我吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-11-02 10:14:34

您可以使用unnest()获取数据的规范化视图,以及聚合:

代码语言:javascript
复制
select community_id, count(*)
from (
  select unnest(community_id) as community_id
  from tbl 
) t
group by community_id
order by community_id;

但是你真的应该修正你的数据模型。

票数 29
EN

Stack Overflow用户

发布于 2015-11-02 10:58:41

代码语言:javascript
复制
SELECT unnest(community_id) community_id ,
       count(user_id) user_count
FROM TABLE_NAME
GROUP BY 1 --community_id = 1 and user_count = 2 (index of a column in select query)
ORDER BY 1

取消嵌套(任意数组):将数组展开为一组行

select unnest(ARRAY[1,2])会给

代码语言:javascript
复制
   unnest
   ------
       1
       2
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33474778

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档