GROUP_CONCAT 함수
설명
GROUP_CONCAT 함수는 그룹에서 NULL이 아닌 값들을 연결하여 결과 문자열을 VARCHAR 타입으로 반환한다. 질의 결과 행이 없거나 NULL 값만 있으면 NULL을 반환한다.
리턴 값의 최대 크기는 시스템 파라미터 group_concat_max_len의 설정을 따른다. 기본값은 1024바이트이며, 최소값은 4바이트, 최대값은 33,554,432바이트이다. 최대값을 초과하면 NULL을 반환한다.
중복되는 값을 제거하려면 DISTINCT 절을 사용하면 된다. 그룹 결과의 값 사이에 사용되는 기본 구분자는 쉼표(,)이며, 구분자를 명시적으로 표현하려면 SEPARATOR 절과 그 뒤에 구분자로 사용할 문자열을 추가한다. 구분자를 제거하려면 SEPARATOR 절 뒤에 빈 문자열(empty string)을 입력한다.
결과 문자열에 문자형 데이터 타입이 아닌 다른 타입이 전달되면, 에러를 반환한다.
GROUP_CONCAT 함수를 사용하려면 다음의 조건을 만족해야 한다.
입력 인자로 하나의 표현식(또는 컬럼)만 허용한다.
ORDER BY를 이용한 정렬은 오직 인자로 사용되는 표현식(또는 컬럼)에 의해서만 가능하다.
구분자로 사용되는 문자열은 문자형 타입만 허용하며, 다른 타입은 허용하지 않는다.
구문
GROUP_CONCAT([DISTINCT] {col | expression}
[ORDER BY {col | unsigned_int} [ASC | DESC]]
[SEPARATOR str_val])
expression : 수치 또는 문자열을 반환하는 하나의 연산식
str_val : 구분자로 쓰일 문자열
DISTINCT : 결과에서 중복되는 값을 제거한다.
ORDER BY : 결과 값의 순서를 지정한다.
SEPARATOR : 결과 값 사이에 구분할 구분자를 지정한다. 생략하면 기본값인 쉼표(,)를 구분자로 사용한다.
예제
SELECT GROUP_CONCAT(s_name) FROM code;
group_concat(s_name)
======================
‘X,W,M,B,S,G’
SELECT GROUP_CONCAT(s_name ORDER BY s_name SEPARATOR ‘:’) from code;
group_concat(s_name order by s_name separator ‘:’)
======================
‘B:G:M:S:W:X’
CREATE TABLE t(i int);
INSERT INTO t VALUES (4),(2),(3),(6),(1),(5);
SELECT GROUP_CONCAT(i*2+1 ORDER BY 1 SEPARATOR ”) FROM t;
group_concat(i*2+1 order by 1 separator ”)
======================