[postgresql] PostgreSQL array_agg 순서

표 ‘동물’:

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하위 쿼리에 절을 추가 할 수 있습니다 .


답변

매뉴얼의 다음 예와 같이 ORDER BY를 사용하십시오 .

SELECT array_agg(a ORDER BY b DESC) FROM table;


답변