MariaDB SQL

GROUP_CONCAT ()으로 여러 행의 문자열을 합칠 수 있다.

ssamhago 2023. 2. 28. 20:41
728x90
320x100

GROUP_CONCAT()

 

 

GROUP_CONCAT([DISTINCT] [컬럼][ORDER BY 컬럼 ASC/DESC][SEPAPATOR '구분자'])

 

 

USER_ADDR
IDX REGION NAME
1 서울 AAA
2 인천 CCC
3 인천 DDD
4 천안 BBB
5 인천 DDD

 

 

기본적으로는 구분자 등을 생략하고 사용한다.
GROUP_CONCAT(컬럼명) : 문자열사이에 구분자는 쉼표(,)가 기본으로 들어간다.

 

위의 테이블(USER_ADDR)에서 지역(REGION)별 이름(NAME)을 나타내고 싶을 때는

SELECT REGION, GROUP_CONCAT(NAME) AS NAMES
FROM USER_ADDR
GROUP BY REGION ;

[실행결과]
USER_ADDR
REGION NAMES
서울 AAA
인천 CCC,DDD,DDD
천안 BBB

 

 

구분자를 쉼표(,)가 아닌 다른 것으로 바꾸고 싶을 때는 SEPAPATOR '구분자' 를 사용한다.
GROUP_CONCAT(컬럼명 SEPAPATOR ' / ' ) : ' / ' 가 구분자로 표시된다.

 

위의 테이블(USER_ADDR)에서 지역(REGION)별 이름(NAME)을 나타내고 구분자는 ' / ' 로 하려면

SELECT REGION, GROUP_CONCAT(NAME SEPAPATOR ' / ') AS NAMES
FROM USER_ADDR
GROUP BY REGION ;

[실행결과]
USER_ADDR
REGION NAMES
서울 AAA
인천 CCC / DDD / DDD
천안 BBB

 

 

합쳐지는 문자열에 중복된 문자를 지우고 싶을 때는 DISTINCT 를 사용한다.
GROUP_CONCAT(DISTINCT 컬럼명)

 

위의 테이블(USER_ADDR)에서 지역(REGION)별 이름(NAME)을 나타내고 중복된 문자열은 제거하고 싶을 때는

SELECT REGION, GROUP_CONCAT(DISTINCT NAME  SEPAPATOR ' / ') AS NAMES
FROM USER_ADDR
GROUP BY REGION ;

[실행결과]
USER_ADDR
REGION NAMES
서울 AAA
인천 CCC / DDD
천안 BBB

 

 

 

합쳐지는 문자열에 중복된 문자를 ORDER BY를 사용해 순서를 정렬할 수 있다.
GROUP_CONCAT(컬럼명 ORDER BY 컬럼 ASC/DESC)

 

위의 테이블(USER_ADDR)에서 지역(REGION)별 이름(NAME)을 나타내고 이름은 역방향 정렬을 사용하고 싶을 때는

SELECT 
   REGION,
   GROUP_CONCAT(
DISTINCT NAME ORDER BY NAME DESC SEPAPATOR ' / ')
AS NAMES
FROM USER_ADDR
GROUP BY REGION ;

[실행결과]
USER_ADDR
REGION NAMES
서울 AAA
인천 DDD / CCC
천안 BBB
728x90
반응형