program tip

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

radiobox 2020. 8. 7. 08:17
반응형

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


이런 테이블이 있어요

Movie   Actor   
  A       1
  A       2
  A       3
  B       4

영화의 이름과 그 영화의 모든 배우를 얻고 싶고 결과가 다음과 같은 형식이되기를 원합니다.

Movie   ActorList
 A       1, 2, 3

내가 어떻게 해?


집계 함수 string_agg()(Postgres 9.0 이상)로 더 간단합니다 .

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

1에서는 GROUP BY 1의 위치 및 기준에 대한 지름길 GROUP BY movie이 경우이다.

string_agg()데이터 유형 text을 입력으로 예상합니다 . 다른 종류의 (명시 적으로 캐스팅해야 actor::text-) 하지 않는 암시 적 캐스트가 text정의 - 다른 모든 문자 유형 (의 경우 인 varchar, character, "char"), 그리고 몇몇 다른 유형.

isapir가 주석을 달았 듯이 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";

결과:

| MOVIE | ACTOR |
-----------------
|     A | 1,2,3 |
|     B |     4 |

이 SQLFiddle 참조

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


 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

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

반응형