Study/DB

[MySQL] GROUP_CONCAT 함수 사용 방법, 예제

 

GROUP_CONCAT이란?

MySQL의 group_concat 함수는 그룹화된 데이터를 하나로 합쳐서 조회할 수 있는 그룹 함수입니다.

MySQL GROUP_CONCAT 공식 문서 바로가기

 

MySQL :: MySQL 8.4 Reference Manual :: 14.19.1 Aggregate Function Descriptions

MySQL 8.4 Reference Manual  /  ...  /  Functions and Operators  /  Aggregate Functions  /  Aggregate Function Descriptions 14.19.1 Aggregate Function Descriptions This section describes aggregate functions that operate on sets of values. They are

dev.mysql.com

 

 

GROUP_CONCAT 기본 사용법

다음과 같이 사용할 수 있습니다.

SELECT <그룹화할 컬럼>, GROUP_CONCAT(<합쳐서 보여줄 컬럼>)
FROM <테이블명>
GROUP BY <그룹화할 컬럼>

GROUP_CONCAT 함수 예제
GROUP_CONCAT 함수 예제

예제의 쿼리는 도시 테이블 데이터를 나라별로 그룹화하여 나라별로 어떤 도시가 있는지 GROUP_CONCAT을 사용해서 표현한 쿼리입니다.

 

GROUP_CONCAT을 사용하면 지정한 컬럼의 데이터를 쉼표로 합쳐서 보여줍니다.

 

 

GROUP_CONCAT 예제

여러 컬럼 사용

GROUP_CONCAT에는 여러 컬럼을 사용할 수 있습니다.

SELECT <그룹화할 컬럼>, GROUP_CONCAT(<컬럼1>, <컬럼2> ...)
FROM <테이블명>
GROUP BY <그룹화할 컬럼>

여러 컬럼 적용
여러 컬럼 적용

GROUP_CONCAT에 여러 컬럼을 적용하면 컬럼 값이 모두 붙어서 나옵니다.

 

 

 

 

 

 

구분자 변경 

쉼표 말고 다른 구분자를 사용하고 싶을 때는 다음과 같이 사용합니다.

SELECT <그룹화할 컬럼>, GROUP_CONCAT(<합쳐서 보여줄 컬럼> separator '<구분자>')
FROM <테이블명>
GROUP BY <그룹화할 컬럼>

쉼표 말고 다른 구분자 적용
쉼표 말고 다른 구분자 적용

 

 

조건 적용

GROUP_CONCAT 결과에 조건을 적용하고싶으면 IF 문같은 조건문을 사용하면 됩니다.

GROUP_CONCAT에 조건문 적용
GROUP_CONCAT에 조건문 적용

예제의 쿼리는 인구가 100만을 넘는 도시만 보여주는 쿼리입니다.

 

중복 제거

GROUP_CONCAT은 해당 그룹에 어떤 데이터가 있는지 그대로 보여줍니다.

GROUP_CONCAT distinct 추가 전
GROUP_CONCAT distinct 추가 전

 

 

만약 중복 제거를 하고싶다면 distinct를 추가하면 됩니다.

distinct 추가 결과
distinct 추가 결과

 

정렬 sort

group_concat의 데이터를 정렬하고 싶을 때는 다음과 같이 사용합니다.

SELECT <그룹화할 컬럼>, GROUP_CONCAT(<합쳐서 보여줄 컬럼> order by <정렬 기준 컬럼>)
FROM <테이블명>
GROUP BY <그룹화할 컬럼>

GROUP_CONCAT 정렬 적용
GROUP_CONCAT 정렬 적용