복붙노트

[SQL] 다른 열 하나의 그룹에 하나의 열의 다수 연결할 결과 행 [중복]

SQL

다른 열 하나의 그룹에 하나의 열의 다수 연결할 결과 행 [중복]

이 같은 테이블에 봉착

Movie   Actor   
  A       1
  A       2
  A       3
  B       4

나는 영화와 그 영화의 모든 배우의 이름을 얻으려면, 나는 이런 형식으로 결과를 원하는 :

Movie   ActorList
 A       1, 2, 3

내가 어떻게 해?

해결법

  1. ==============================

    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. ==============================

    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. ==============================

    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를 읽을 수 있습니다

  4. 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