2017-11-02 14 views
0
|id  |profile  |data 
|1  |name1  |2.1 
|1  |name2  |400 
|1  |name3  |200 
|2  |name1  |3.4 
|2  |name2  |350 
|2  |name3  |500 

これは私が現時点で持っているものです。私はこのクエリ実行時:PostgreSQL 8.4 - array_agg with order

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; 

データ位置の一致が一貫していないことを試みました。私は、私はARRAY_AGG(データBYプロファイルORDER)を使用することはできませんのPostgreSQL 8.4を使用しています

|id  |array(profile)   |array(data) 
|1  |{name1, name2, name3} |{2.1, 400, 200} 
|2  |{name1, name2, name3} |{3.4, 350, 500} 

:私はこの結果を望んでいました。

答えて

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;