MySQL에서 데이터를 정렬된 순서로 집계하려면 GROUP_CONCAT() 함수와 ORDER BY 절을 함께 사용하면 됩니다. 이 글에서는 실제 예제를 통해 단계별로 살펴보겠습니다.
1. 테이블 생성하기
먼저 예제에 사용할 테이블을 생성합니다.
mysql> create table DemoTable1588 -> ( -> StudentId int, -> StudentFirstName varchar(20), -> StudentMarks int -> ); Query OK, 0 rows affected (0.49 sec)
위 쿼리는 학생 ID(StudentId), 이름(StudentFirstName), 점수(StudentMarks) 세 개의 컬럼을 가진 테이블을 만듭니다.
2. 레코드 삽입하기
INSERT 명령을 사용해 테이블에 샘플 데이터를 입력합니다.
mysql> insert into DemoTable1588 values(110,'Bob',78); Query OK, 1 row affected (0.13 sec) mysql> insert into DemoTable1588 values(101,'Sam',78); Query OK, 1 row affected (0.10 sec) mysql> insert into DemoTable1588 values(105,'Mike',78); Query OK, 1 row affected (0.26 sec)
3. 저장된 데이터 확인하기
SELECT 문으로 테이블의 모든 레코드를 조회합니다.
mysql> select * from DemoTable1588;
실행 결과는 다음과 같습니다.
+-----------+------------------+--------------+ | StudentId | StudentFirstName | StudentMarks | +-----------+------------------+--------------+ | 110 | Bob | 78 | | 101 | Sam | 78 | | 105 | Mike | 78 | +-----------+------------------+--------------+ 3 rows in set (0.00 sec)
4. 정렬 순서로 집계 함수 호출하기
이제 핵심인 정렬 순서를 적용한 집계 쿼리입니다. GROUP_CONCAT() 내부에 ORDER BY와 SEPARATOR 옵션을 지정하면 원하는 순서와 구분자로 문자열을 연결할 수 있습니다.
mysql> select group_concat(StudentFirstName order by StudentId separator '--') from DemoTable1588 -> group by StudentMarks;
실행 결과는 다음과 같습니다.
+------------------------------------------------------------------+ | group_concat(StudentFirstName order by StudentId separator '--') | +------------------------------------------------------------------+ | Sam--Mike--Bob | +------------------------------------------------------------------+ 1 row in set (0.04 sec)
결과 분석
출력 결과를 보면 학생 이름이 StudentId 오름차순(101 → 105 → 110)으로 정렬되어 'Sam--Mike--Bob' 형태로 출력된 것을 확인할 수 있습니다. 만약 SEPARATOR 옵션을 지정하지 않으면 기본 구분자인 콤마(,)가 사용됩니다.
이처럼 GROUP_CONCAT() 함수 안에서 ORDER BY 절을 사용하면 그룹화된 값들을 원하는 정렬 순서로 하나의 문자열로 합칠 수 있어, 목록 출력이나 CSV 형태의 데이터 변환 등 다양한 상황에서 유용하게 활용됩니다.