首页 > 解决方案 > 如何在两列中聚合和分组?

问题描述

   Name          age   gender
competition1      3      0
competition1      3      1
competition1      2      0
competition1      2      1
competition2      3      0
competition2      3      1
competition3      1      0

我想在下表中查询转换为下表。

     Name          Array of ages   Array of gender
'competition1',      {'3','2'}       {'0','1'}
'competition2',      {'3'}       {'0','1'}
'competition3',      {'1'}           {'0'}

标签: sqlarrayspostgresqlselectgroup-by

解决方案


您可以按 聚合name,并使用array_agg(distinct ...)来生成没有重复的数组。请注意,您还可以根据需要对数组中的值进行排序:

select 
    name, 
    array_agg(distinct age order by age desc) ages, 
    array_agg(distinct gender order by gender) genders
from mytable
group by name

推荐阅读