MySQL에서 여러 행의 열 값을 쉼표로 구분된 CSV(Comma-Separated Values) 형식으로 한 줄에 표시하고 싶다면 GROUP_CONCAT() 함수를 사용하면 됩니다. 이 함수는 그룹 내의 문자열 값들을 연결하여 하나의 문자열로 반환합니다.
1. 테이블 생성하기
먼저 예제에 사용할 테이블을 생성해 보겠습니다.
mysql> create table DemoTable786 (
StudentId int NOT NULL AUTO_INCREMENT PRIMARY KEY,
StudentName varchar(100)
)
AUTO_INCREMENT=101;
Query OK, 0 rows affected (0.70 sec)2. 데이터 삽입하기
INSERT 명령을 사용하여 테이블에 몇 개의 레코드를 추가합니다.
mysql> insert into DemoTable786(StudentName) values('Chris');
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable786(StudentName) values('Robert');
Query OK, 1 row affected (0.24 sec)
mysql> insert into DemoTable786(StudentName) values('Mike');
Query OK, 1 row affected (0.15 sec)
mysql> insert into DemoTable786(StudentName) values('Sam');
Query OK, 1 row affected (0.12 sec)3. 전체 레코드 조회하기
SELECT 문을 사용하여 테이블의 모든 레코드를 확인해 보겠습니다.
mysql> select *from DemoTable786;
위 쿼리는 다음과 같은 결과를 출력합니다.
+-----------+-------------+ | StudentId | StudentName | +-----------+-------------+ | 101 | Chris | | 102 | Robert | | 103 | Mike | | 104 | Sam | +-----------+-------------+ 4 rows in set (0.00 sec)
4. GROUP_CONCAT()으로 CSV 형식으로 변환하기
다음은 MySQL에서 열 값들을 CSV 형식으로 선택하는 쿼리입니다.
mysql> select group_concat(StudentId),group_concat(StudentName) from DemoTable786;
실행 결과는 아래와 같습니다.
+-------------------------+---------------------------+ | group_concat(StudentId) | group_concat(StudentName) | +-------------------------+---------------------------+ | 101,102,103,104 | Chris,Robert,Mike,Sam | +-------------------------+---------------------------+ 1 row in set (0.00 sec)
추가 팁
GROUP_CONCAT()은 기본적으로 쉼표(,)로 값을 구분하지만, SEPARATOR 옵션을 사용하면 원하는 구분자를 지정할 수 있습니다. 또한 ORDER BY 절을 함께 사용하면 연결되는 값들의 순서를 정렬할 수도 있습니다.
mysql> select group_concat(StudentName order by StudentName desc separator ' | ') from DemoTable786;
참고로 GROUP_CONCAT()에는 기본적으로 최대 길이 제한(group_concat_max_len, 기본값 1024바이트)이 있으므로, 대량의 데이터를 처리할 때는 이 설정값을 조정해야 할 수 있습니다.