보통 테이블을 SELECT하면 테이블에 존재하는 레코드 수만큼 반환을 하게 되는데, 때때로 반환한 레코드를 한 줄의 데이터로 변경할 경우가 있다. 

예를들면, 

one
two
three

테이블의 컬럼 데이터를 one, two, three로 반환하고 싶은 것이다.

이런 경우 MySQL에서는 GROUP_CONCAT을 사용한다.

SELECT group_concat(name) FROM Test;

또한, group_concat을 사용할 때 대량의 데이터를 사용할 때 종종 잘리기도 하는데 아래의 옵션을 조정하여 해결할 수 있다.

mysql> SET @@group_concat_max_len = 크기; 


추가) 2013-08-13

1. group_concat을 하면 기본적으로 ,로 구분하여 데이터가 나타나는데, 이 구분자를 변경할 필요가 있을 수 있다.

SELECT group_concat(name SEPARATOR '|') FROM Test;

만약 |로 구분하고 싶다면 위의 예처럼 사용이 가능하다.


2. group_concat을 했는데 결과에 중복값들이 있어 중복제거가 필요할 경우

SELECT group_concat(DISTINCT name) FROM Test;


3. group_concat의 결과를 정렬하고 싶다면

SELECT group_concat(name ORDER BY name) FROM Test;



$query  = "select a.*, GROUP_CONCAT((select c.name from bank_category c where c.code = b.code_category)) as name ";

$query .= 'from bank_notice a, bank_notice_category b ';

$query .= "where b.code_notice = a.code ";

$query .= "group by a.code ";