MySQL 그룹별 문자열 묶기
그룹별로 컬럼 데이터(문자열)를 묶어서 보고 싶을 때가 있습니다.
이런 상황이 발생했을 때 MySQL이나 Oracle에서 유용하게 사용할 수 있는 함수를 비교해서 알려드리도록 하겠습니다.
animal | name |
monkey | Lo |
monkey | Jay |
monkey | Jayce |
elephant | pink |
elephant | Tayo |
elephant | K |
위와 같이 그룹(컬럼)에 따라 데이터가 있는 상황에서,
아래와 같이 그룹별로 문자열을 묶어서 출력해야 할 때가 있습니다.
animal | names |
elephant | K,pink,Tayo |
monkey | Jay,Jayce,Lo |
사용 함수(+정렬)
MySQL : GROUP_CONCAT(column ORDER BY column SEPERATOR 구분자) ~ group by(column)
Oracle : LISTAGG(column, 구분자) within group(order by column)
1) MySQL
select animal, group_concat(name SEPARATOR ',') names
from animals group by animal;
여기서 SEPARATOR는 구분자를 지정해주는 것이 Default 값(명시 X)은 ','임.
묶은 컬럼 데이터에 있어서 순서를 지정하고 싶다면,
group_concat(column order by column seperator ~) 이런식으로 사용하면 됨.
2) Oracle
select animal, LISTAGG(name, ',') WITHIN GROUP(ORDER BY name) as 'names'
from animals group by(animal);
함수는 다르지만, 사용방법은 동일.
따로 SEPERATOR 문자 없이 바로 구분자 지정해주면 됨.
묶은 데이터를 정렬해야 한다면, LISTAGG 뒤에 within group(order by column) 사용.
반응형
'Programming > SQL' 카테고리의 다른 글
[MySQL] 엑셀 import & export (0) | 2021.07.08 |
---|---|
[MySQL] 여러 행으로 분리하기 (구분자) (3) | 2021.07.06 |
[MySQL] 정규표현식 검색하기 REGEXP, LIKE (2) | 2021.06.30 |
[MySQL] 날짜 요일로 변환하기 (0) | 2021.06.25 |
[MySQL] 그룹 함수 다루기 (0) | 2021.06.22 |
댓글