|id |profile |data
|1 |name1 |2.1
|1 |name2 |400
|1 |name3 |200
|2 |name1 |3.4
|2 |name2 |350
|2 |name3 |500
这就是我现在所拥有的。当我运行此查询时:
SELECT id, ARRAY_AGG(profile), ARRAY_AGG(data) FROM "schema"."table" GROUP BY id;
我得到了:
|id |array(profile) |array(data)
|1 |{name1, name2, name3} |{2.1, 400, 200}
|2 |{name2, name3, name1} |{350, 500, 3.4}
我也试过预先排序
SELECT id, ARRAY_AGG(profile), ARRAY_AGG(data) FROM (SELECT * FROM "schema"."table" ORDER BY id) A GROUP BY id;
两个阵列上的数据位置匹配但格式不一致。我想要这个结果:
|id |array(profile) |array(data)
|1 |{name1, name2, name3} |{2.1, 400, 200}
|2 |{name1, name2, name3} |{3.4, 350, 500}
我正在使用 PostgreSQL 8.4 ,因此我无法使用array_agg(配置文件ORDER BY数据)。
答案 0 :(得分:1)
据我记得Postgres 8.4,你可以尝试在已排序的派生表上执行聚合(遗憾的是我无法运行8.4来验证这一点),例如:
select id, array_agg(profile), array_agg(data)
from (
select *
from my_table
order by id, profile) s
group by id
order by id;