表「動物」:
animal_name animal_type
Tom Cat
Jerry Mouse
Kermit Frog
クエリ:
SELECT
array_to_string(array_agg(animal_name),';') animal_names,
array_to_string(array_agg(animal_type),';') animal_types
FROM animals;
期待される結果:
Tom;Jerry;Kerimt, Cat;Mouse;Frog
OR
Tom;Kerimt;Jerry, Cat;Frog;Mouse
最初の集計関数の順序が常に2番目の関数と同じであることを確認できますか。私は取得したくないという意味です:
Tom;Jerry;Kermit, Frog;Mouse,Cat
PostgreSQLバージョン9.0未満の場合:
From: http://www.postgresql.org/docs/8.4/static/functions-aggregate.html
現在の実装では、入力の順序は原則として指定されていません。ただし、ソートされたサブクエリから入力値を提供することは通常機能します。例えば:
SELECT xmlagg(x)FROM(SELECT x FROMテストORDER BY y DESC)ASタブ;
だからあなたの場合、あなたは書くだろう:
SELECT
array_to_string(array_agg(animal_name),';') animal_names,
array_to_string(array_agg(animal_type),';') animal_types
FROM (SELECT animal_name, animal_type FROM animals) AS x;
Array_aggへの入力は順序付けられませんが、両方の列で同じになります。必要に応じて、サブクエリにORDER BY
句を追加できます。
manual の次の例のように、ORDER BYを使用します。
SELECT array_agg(a ORDER BY b DESC) FROM table;