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
매뉴얼의 다음 예와 같이 ORDER BY를 사용합니다.
SELECT array_agg(a ORDER BY b DESC) FROM table;
당신이 포스트그리에 있는 경우SQL 버전 < 9.0 그러면:
보낸 사람: http://www.postgresql.org/docs/8.4/static/functions-aggregate.html
현재 구현에서는 원칙적으로 입력 순서가 지정되지 않습니다.그러나 정렬된 하위 쿼리에서 입력 값을 제공하면 일반적으로 작동합니다.예:
xmlagg(x) 시작(테스트 순서에서 x 선택 by yescript) 탭으로 선택
그래서 당신의 경우에는 다음과 같이 적을 것입니다.
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
서브쿼리의 절.
제가 제대로 읽는다면 OP는 두 집계 함수가 데이터를 *동일한* 지정되지 않은 순서로 볼 수 있도록 하기를 원합니다.저는 그것이 꽤 안전한 가정이라고 생각합니다.서버는 다른 방식으로 작업을 수행해야 하지만 실제로는 않습니다.
따라서 고유한 ORDER BY가 없는 Aggregate는 FROM 절이 제공하는 순서에 상관없이 행을 볼 수 있습니다.
따라서 쿼리에서 ORDER BY를 사용하지 않는 모든 Aggregate가 동일한 순서로 입력 데이터를 볼 수 있다고 가정해도 괜찮다고 생각합니다.그러나 순서 자체는 지정되지 않았습니다(FROM 절이 행을 제공하는 순서에 따라 다름).
수행할 작업:
SELECT
array_to_string(array_agg(animal_name order by animal_name),';') animal_names,
array_to_string(array_agg(animal_type order by animal_type),';') animal_types
FROM
animals;
언급URL : https://stackoverflow.com/questions/7317475/postgresql-array-agg-order
'programing' 카테고리의 다른 글
리소스(.resx) 파일의 이점은 무엇입니까? (0) | 2023.05.16 |
---|---|
이클립스:프로젝트 탐색기에서 모든 프로젝트가 사라졌습니다. (0) | 2023.05.16 |
Bash의 변수에 출력 할당 (0) | 2023.05.16 |
가져오기 오류: 'yaml'이라는 이름의 모듈이 없습니다. (0) | 2023.05.16 |
여러 원격 위치에서 풀/푸시하려면 어떻게 해야 합니까? (0) | 2023.05.16 |