2024. 8. 30. 12:42ㆍLanguage/SQL
데이터를 한 문자열로 합칠 때 CONCAT 을 사용해 만들 수 있었다. 이번에는 그룹별 컬럼이 가지고 있는 데이터를 하나로 합치는 GROUP_CONCAT 에 대해서 알아보자.
1. 기본 문법
SELECT 그룹할 컬럼명, GROUP_CONCAT(지정컬럼명 SEPARATOR 구분자) 별명
FROM 테이블명
GROUP BY 그룹할 컬럼명
일단 해당 함수를 사용하려면 GROUP BY 절을 사용해 데이터를 그룹화 해야한다. 그렇기에 기본 문법에 GROUP BY 절을 추가해 두었다. 기능은 기존 CONCAT 과 같지만 GROUP_CONCAT 은 집계 함수라는 점이 다르다. 그룹화 된 컬럼의 데이터들을 합쳐 한 문자열 데이터(LONGTEXT)로 출력하는 기능을 가지고 있다.
SEPARATOR 의 경우 원하는 구분자가 있을 때 사용한다 GROUP_GROUP 함수는 ' , ' 를 기본 구분자로 사용하며 기본 구분자 사용시 해당 부분은 생략해도 무방하다. 지정할 구분자는작은 따옴표(' ') 안에 작성하여 사용하면 된다.
2. 사용 예시
2-1. 구분자 지정 GROUP_CONCAT
'food_orders' 테이블에는 음식점의 이름(restaurant_name)과 음식점이 제공하는 음식 종류(cuisine_type) 컬럼이 있는데 해당 컬럼들을 사용해 음식 종류에 해당하는 음식점들의 이름을 컬럼 'names' 에 출력하는 쿼리를 작성해보자.
SELECT cuisine_type, GROUP_CONCAT(restaurant_name SEPARATOR ' || ') names
FROM
(
SELECT cuisine_type, restaurant_name
FROM food_orders
GROUP BY 2
) sq
GROUP BY 1
같은 음식점의 중복 주문으로 음식점 이름에 해당하는 여러 레코드가 있으므로 서브쿼리를 사용해 중복 레코드를 제거해주고 음식 종류('cuisine_type')별 음식점명('restaurant_name')들을 GROUP_CONCAT 을 사용해 'names' 컬럼에 담은 결과를 출력하였다. 또한 SEPARATOR 를 사용해 구분자를 ' || '(공백문자 포함)로 지정하여 사용했다.
위의 이미지를 보면 음식 종류 별로 해당하는 음식점들의 이름이 구분자 ' || ' 를 사용해 하나의 컬럼에 담겨 출력된 것을 확인 할 수 있다. 직접사용해보니 구분자 지정 시 단일 문자를 사용하는 것 보다 공백문자(' ')를 사용해 좀 더 구분이 쉽게 하는 것도 좋아 보였지만 처리하는 데이터가 많을 경우에는 이런 방법은 또 별로일 것 같다는 생각이 들었다. 아무래도 처리 데이터의 양을 줄이기 위해 실무에서는 단일 문자를 구분자로 지정하지 않을까?
'Language > SQL' 카테고리의 다른 글
[SQL] 레코드 집합 합치기 - UNION (0) | 2024.09.11 |
---|---|
[SQL] 임시 테이블 생성 - WITH (0) | 2024.09.11 |
[SQL] 실수 데이터 다루기 - ROUND, FLOOR, CEILING, TRUNCATE (0) | 2024.08.25 |
[SQL] 날짜/시간 데이터 포맷 다루기 - DATE, TIME, DATE_FORMAT (0) | 2024.08.21 |
[SQL] WINDOWS FUNCTION - RANK (0) | 2024.08.21 |