Tabel 'hewan':
animal_name animal_type
Tom Cat
Jerry Mouse
Kermit Frog
Pertanyaan:
SELECT
array_to_string(array_agg(animal_name),';') animal_names,
array_to_string(array_agg(animal_type),';') animal_types
FROM animals;
Hasil yang diharapkan:
Tom;Jerry;Kerimt, Cat;Mouse;Frog
OR
Tom;Kerimt;Jerry, Cat;Frog;Mouse
Dapatkah saya yakin bahwa urutan fungsi agregat pertama akan selalu sama seperti urutan kedua. Maksud saya, saya tidak ingin mendapatkan:
Tom;Jerry;Kermit, Frog;Mouse,Cat
string_agg()
Jawaban:
Jika Anda menggunakan versi PostgreSQL <9.0 maka:
Dari: http://www.postgresql.org/docs/8.4/static/functions-aggregate.html
Jadi dalam kasus Anda, Anda akan menulis:
Masukan ke array_agg kemudian tidak akan diurutkan tetapi akan sama di kedua kolom. Dan jika Anda mau, Anda bisa menambahkan
ORDER BY
klausa ke subkueri.sumber
Gunakan ORDER BY, seperti contoh dari manual ini :
sumber
ORDER BY
inarray_agg
diperkenalkan di PostgreSQL 9array_agg(DISTINCT a ORDER BY b)
array_agg((a, b, c) ORDER BY b)