[SQL] 다른 열 하나의 그룹에 하나의 열의 다수 연결할 결과 행 [중복]
SQL다른 열 하나의 그룹에 하나의 열의 다수 연결할 결과 행 [중복]
이 같은 테이블에 봉착
Movie Actor
A 1
A 2
A 3
B 4
나는 영화와 그 영화의 모든 배우의 이름을 얻으려면, 나는 이런 형식으로 결과를 원하는 :
Movie ActorList
A 1, 2, 3
내가 어떻게 해?
해결법
-
==============================
1.집계 함수의 string_agg () (포스트 그레스 9.0 이상)과 간단한 :
집계 함수의 string_agg () (포스트 그레스 9.0 이상)과 간단한 :
SELECT movie, string_agg(actor, ', ') AS actor_list FROM tbl GROUP BY 1;
1 BY GROUP의 1은 위치 참조이 경우 GROUP BY 영화에 대한 바로 가기입니다.
string_agg ()는 입력으로 데이터 형식 텍스트를 기대한다. 다른 종류의 명시 적으로 캐스팅해야 (배우 : 텍스트) - 텍스트에 대한 암시 적 캐스트가 정의되지 않은 경우 - 다른 모든 문자 유형 (VARCHAR, 문자, "문자"), 그리고 몇몇 다른 유형의 경우이다.
isapir 댓글을 달았습니다, 당신은 정렬 된 목록을 얻을 수있는 총 호출에 ORDER BY 절을 추가 할 수 있습니다 - 당신이 필요합니다. 처럼:
SELECT movie, string_agg(actor, ', ' ORDER BY actor) AS actor_list FROM tbl GROUP BY 1;
그러나 하위 쿼리에서 정렬 행을 일반적으로 빠르다. 보다:
-
==============================
2.당신은 그것을 위해 array_agg 기능을 사용할 수 있습니다 :
당신은 그것을 위해 array_agg 기능을 사용할 수 있습니다 :
SELECT "Movie", array_to_string(array_agg(distinct "Actor"),',') AS Actor FROM Table1 GROUP BY "Movie";
결과:
| MOVIE | ACTOR | ----------------- | A | 1,2,3 | | B | 4 |
더 9.18를 참조하십시오. 집계 함수
-
==============================
3.
select movie,GROUP_CONCAT(DISTINCT Actor) as ActorList from toyr_table group by movie
여기 http://www.w3resource.com/mysql/aggregate-functions-and-grouping/aggregate-functions-and-grouping-group_concat.php를 읽을 수 있습니다
from https://stackoverflow.com/questions/15847173/concatenate-multiple-result-rows-of-one-column-into-one-group-by-another-column by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 어떻게 변수를 선언하고 동일한 오라클 SQL 스크립트에서 사용하는 방법? (0) | 2020.04.03 |
---|---|
[SQL] 날짜 데이터 형식에 대한 기본 값으로 () NOW 설정? (0) | 2020.04.03 |
[SQL] 데이터베이스 테이블의 컬럼의 목록을 저장하는 방법 (0) | 2020.04.03 |
[SQL] AUTO_INCREMENT이 될 수있는 MySQL의 컬럼을 변경합니다 (0) | 2020.04.03 |
[SQL] PostgreSQL의에서 테이블의 행 수를 발견하는 빠른 방법 (0) | 2020.04.03 |