programing

한 열의 여러 결과 행을 하나로 연결하고 다른 열로 그룹화

muds 2023. 5. 1. 22:06
반응형

한 열의 여러 결과 행을 하나로 연결하고 다른 열로 그룹화

저는 이런 테이블을 먹고 있습니다.

영화. 배우.
A 1
A 2
A 3
B 4

영화 이름과 해당 영화에 출연하는 모든 배우의 이름을 얻고 싶으며 결과는 다음과 같은 형식으로 표시됩니다.

영화. 배우 목록
A 1, 2, 3

어떻게 해야 하나요?

Aggregate 기능(Postgres 9.0 이상)으로 단순화:

SELECT movie, string_agg(actor, ', ') AS actor_list
FROM   tbl
GROUP  BY 1;

1GROUP BY 1의 위치 참조 및 바로 가기입니다.GROUP BY movie이 경우에는

string_agg()예상 데이터 유형text입력으로서다른 유형은 명시적으로 캐스팅해야 합니다(actor::text) - 암묵적으로 캐스팅되지 않는 한.text는 정의됩니다. 이는 다른 모든 문자열 유형의 경우입니다.varchar,character,name...) 및 기타 몇 가지 유형.

isair가 언급했듯이, 당신은 다음을 추가할 수 있습니다.ORDER BY정렬된 목록을 가져오는 집계 호출의 절 - 필요한 경우.예:

SELECT movie, string_agg(actor, ', ' ORDER BY actor) AS actor_list
FROM   tbl
GROUP  BY 1;

그러나 일반적으로 하위 쿼리에서 행을 정렬하는 것이 더 빠릅니다.참조:

사용할 수 있습니다.array_agg다음을 위한 기능:

SELECT "Movie",
array_to_string(array_agg(distinct "Actor"),',') AS Actor
FROM Table1
GROUP BY "Movie";

결과:

영화. 배우.
A 1,2,3
B 4

SQLFidle 보기

자세한 내용은 9.18을 참조하십시오. 집계 함수

언급URL : https://stackoverflow.com/questions/15847173/concatenate-multiple-result-rows-of-one-column-into-one-group-by-another-column

반응형