DB/MySQL

[Mysql] 문자열 합치기(CONCAT, GROUP_CONCAT)

동호다찌 2022. 4. 22. 18:02
반응형

CONCAT

둘 이상의 문자열 값을 엔드투엔드 방식으로 연결하거나 조인한 결과 문자열을 반환합니다.
인수는 2개 이상 254개 이하로 사용 가능하다.

CONCAT(값1, 값2, 값3, ... 값N)

SELECT 
        CONCAT('concat함수: ', '문자', '문자') AS test1,
        CONCAT('concat함수: ', '문자', 1) AS test2,
        CONCAT('concat함수: ', NULL) AS test3,
        CONCAT(NULL, NULL) AS test4 ;

 

같은 데이터 타입이나 다른 데이터 타입을 연결 시에는 가능하다. 하지만 

CONCAT에서 NULL값은 빈 문자열로 암시적으로 변환하고,

CONCAT에서 모두 NULL값을 인수로 넣으면 VARCHAR(1) 형식의 빈 문자열을 반환한다.

 


GROUP_CONCAT

필요에 의해 서로 다른 결과를 한줄로 합쳐서 보여줘야 할 경우가 있다.

전체 결과값을 가져와서 java 와 같은 프로그램 언어에서 for 문을 돌며 문자열을 붙여도 되긴 하지만
Select 쿼리를 던질때 결과값으로 합쳐져 있는 문자열을 받는게 더 편하다.

SELECT * FROM fruits;

id type name
1 과일 수박
2 과일 사과
3 과일 바나나
4 과일 키위

타입이 과일인 과일의 이름을 한줄에 보고 싶다면 이 때 , GROUP_CONCAT을 사용할 수 있다.

SELECT type, 
       GROUP_CONCAT(name) AS '과일명'
  FROM fruits
 GROUP BY type;

결과이미지

과일이라는 타입으로 그룹하여 문자열을 합쳐 보여줬다. 하지만 특정 구분자를 사이에 넣어 문자열을 합칠 수 있다.
또한 해당 그룹핑에서 ORDER BY 정렬을 통해 문자열을 정렬도 가능하다.

-- 기본형
SELECT type, 
       GROUP_CONCAT(name) AS '과일명'
  FROM fruits
 GROUP BY type;
 
 -- 중복제거
 SELECT type, 
       GROUP_CONCAT(DISTINCT name) AS '과일명'
  FROM fruits
 GROUP BY type;
 
 -- 구분자 지정
  SELECT type, 
       GROUP_CONCAT(DISTINCT name SEPARATOR ', ') AS '과일명'
  FROM fruits
 GROUP BY type;
 
 -- 문자열 정렬
 SELECT type, 
       GROUP_CONCAT(DISTINCT name ORDER BY name SEPARATOR ', ') AS '과일명'
  FROM fruits
 GROUP BY type;


MySQL에서 GROUP_BY로 문자열을 합칠땐 GROUP_CONCAT을 이용한다.

1. 기본형 : GROUP_CONCAT(필드명)
2. 구분자 변경 : GROUP_CONCA(필드명 SEPARATOR '구분자')
3. 중복제거 : GROUP_CONCA(DISTICT 필드명)
4. 문자열 정렬 : GROUP_CONCA(필드명 ORDER BY 필드명)

반응형