【发布时间】:2017-10-18 07:15:21
【问题描述】:
我有以下输入:
name | count | options
-----------------------
user1 | 3 | ['option1', 'option2']
user1 | 12 | ['option2', 'option3']
user2 | 2 | ['option1', 'option3']
user2 | 1 | []
我想要以下输出:
name | count | options
-----------------------
user1 | 12 | ['option1', 'option2', 'option3']
user2 | 2 | ['option1', 'option3']
我按名称分组。对于每个组,计数应汇总为max,选项应汇总为union。我很难弄清楚后者是怎么做的。
目前,我有这个查询:
with data(name, count, options) as (
select 'user1', 12, array['option1', 'option2']::text[]
union all
select 'user1', 12, array['option2', 'option3']::text[]
union all
select 'user2', 2, array['option1', 'option3']::text[]
union all
select 'user2', 1, array[]::text[]
)
select name, max(count)
from data
group by name
我知道这可以通过定义自定义聚合函数轻松完成,但我想通过查询来完成。我了解unnest() 数组的基础知识(以及array_agg() 稍后的结果),但不知道如何在我的查询中注入它。
【问题讨论】:
-
以
array_agg()开头。这能解决你的问题吗?
标签: sql arrays postgresql aggregate-functions