아래와 같은 경우에, STUDENT_ID 로 묶어서 SUBJECT 값들을 출력하고 싶으면 어떻게 해야할까?
STUDENT_ID | NAME | SUBJECT
-----------+------+--------
1 | 김철수 | 국어
1 | 김철수 | 수학
1 | 김철수 | 영어
2 | 이영희 | 국어
2 | 이영희 | 과학
3 | 박민수 | 수학
3 | 박민수 | 체육
GROUP_CONCAT
GROUP_CONCAT 함수를 사용하면 그룹 내 데이터를 하나의 문자열로 결합하여 출력할 수 있다.
아래와 같이 GROUP_CONCAT 을 사용하면 된다.
SELECT
STUDENT_ID,
GROUP_CONCAT(SUBJECT) AS SUBJECTS
FROM
STUDENT_INFO
GROUP BY
STUDENT_ID;
해당 쿼리를 실행하면 다음과 같이 결과가 나오게 된다.
STUDENT_ID | SUBJECTS
-----------+------------------
1 | 국어,수학,영어
2 | 국어,과학
3 | 수학,체육
구분자 변경
GROUP_CONCAT 함수는 기본적으로 쉼표(,) 값을 구분하여 반환한다. 구분자를 변경하고싶으면 SEPARATOR 옵션을 사용하면 된다.
SELECT
STUDENT_ID,
GROUP_CONCAT(SUBJECT SEPARATOR ' / ') AS SUBJECTS
FROM
STUDENT_INFO
GROUP BY
STUDENT_ID;
결과
STUDENT_ID | SUBJECTS
-----------+------------------
1 | 국어 / 수학 / 영어
2 | 국어 / 과학
3 | 수학 / 체육
중복 제거
DISTINCT 를 사용하면 중복된 값을 제거할 수 있다.
SELECT
POST_ID,
GROUP_CONCAT(DISTINCT TAG) AS TAGS
FROM
POST_INFO
GROUP BY
POST_ID;
결과
POST_ID | TAGS
--------+------------------
1 | 여행,풍경,자연
2 | 요리,레시피
3 | 운동,건강
정렬
ORDER BY 절을 사용하여 결과를 정렬할 수 있다.
SELECT
POST_ID,
GROUP_CONCAT(TAG ORDER BY TAG) AS TAGS
FROM
POST_INFO
GROUP BY
POST_ID;
결과
POST_ID | TAGS
--------+------------------
1 | 자연,여행,풍경
2 | 레시피,요리
3 | 건강,운동