표 ‘동물’:
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
첫 번째 집계 함수의 순서가 항상 두 번째와 동일하다는 것을 확신 할 수 있습니까? 나는 받고 싶지 않다는 것을 의미합니다.
Tom;Jerry;Kermit, Frog;Mouse,Cat
답변
PostgreSQL 버전 9.0 미만인 경우 :
출처 : http://www.postgresql.org/docs/8.4/static/functions-aggregate.html
현재 구현에서 입력 순서는 원칙적으로 지정되지 않습니다. 그러나 정렬 된 하위 쿼리에서 입력 값을 제공하면 일반적으로 작동합니다. 예를 들면 :
SELECT xmlagg (x) FROM (SELECT x FROM test 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
하위 쿼리에 절을 추가 할 수 있습니다 .