[MySQL] group_concat 사용법 모음 (문자열 구분자 묶음)
- 빅데이터 및 DB/MySQL
- 2022. 4. 22.
여러개의 Row로 되어 있는 데이터를 한개의 값으로 묶어서 가지고 오고 싶을 경우, MySQL(혹은 MariaDB)에서는 Group_Concat을 사용하여 처리할 수 있다.
실행 예시
테이블 생성
CREATE TABLE `stock` (
`stock_id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'pk',
`exchange` varchar(10) NOT NULL COMMENT '구분',
`stock_nm` varchar(50) NOT NULL COMMENT '주식명',
`ticker` varchar(10) NOT NULL COMMENT '티커',
PRIMARY KEY (`stock_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3;
데이터 삽입
INSERT INTO my_place.stock
(exchange, stock_nm, ticker)
VALUES('kospi', '삼성전자', '005930');
INSERT INTO my_place.stock
(exchange, stock_nm, ticker)
VALUES('kospi', 'LG전자', '066570');
INSERT INTO my_place.stock
(exchange, stock_nm, ticker)
VALUES('kospi', '현대차', '005380');
INSERT INTO my_place.stock
(exchange, stock_nm, ticker)
VALUES('kosdaq', 'JYP Ent', '035900');
Group_Concat
거래소가 코스피인 주식종목 group_concat
select
exchange,
group_concat(stock_nm) from stock
where exchange = 'kospi';
exchange|group_concat(stock_nm)|
--------+----------------------+
kospi |삼성전자,LG전자,현대차 |
group_concat 정렬(order by)
select
exchange,
group_concat(stock_nm order by stock_id desc) from stock
where exchange = 'kospi';
stock_id를 내림차순으로 정렬한 후 group_concat
exchange|group_concat(stock_nm order by stock_id desc)|
--------+---------------------------------------------+
kospi |현대차,LG전자,삼성전자 |
group_concat 중복제거
중복 데이터 추가
INSERT INTO my_place.stock
(exchange, stock_nm, ticker)
VALUES('kospi', '현대차', '005380');
중복 데이터 확인
select
exchange,
group_concat(stock_nm) from stock
where exchange = 'kospi';
exchange|group_concat(stock_nm)|
--------+----------------------+
kospi |삼성전자,LG전자,현대차,현대차 |
데이터가 중복이 있으면, 위와 같이 중복으로 데이터가 들어가게 된다. 중복으로 데이터가 들어가길 원치 않는다면...
중복 제거 concat 쿼리
select
exchange,
group_concat(distinct stock_nm) from stock
where exchange = 'kospi';
이와 같이 distinct를 사용하여, 중복을 제거한다.
중복이 제거된 모습
exchange|group_concat(distinct stock_nm)|
--------+-------------------------------+
kospi |LG전자,삼성전자,현대차 |
group_concat 구분자 변경
group_concat은 default로 콤마(,)를 구분자로 사용한다. 하지만 데이터에 콤마가 들어가는 경우, 문제가 발생할 수 있기에 다른 구분자를 사용하는 것도 지원을 해준다
콜론(:)으로 구분자를 변경하는 경우
select
exchange,
group_concat(stock_nm separator ':') from stock
where exchange = 'kospi';
exchange|group_concat(stock_nm separator ':')|
--------+------------------------------------+
kospi |삼성전자:LG전자:현대차:현대차 |
'빅데이터 및 DB > MySQL' 카테고리의 다른 글
[MySQL] Union으로 테이블 합치기 (0) | 2022.08.07 |
---|---|
[MySQL] date_format 설정 (날짜 포맷 변경) (0) | 2022.04.24 |
[MySQL] Batch 및 Load 비교. (0) | 2018.08.20 |
[MySQL] ROWNUM(번호) 및 페이징(Paging) 처리 (0) | 2018.08.14 |
[MariaDB] UTF-8 캐릭터(Character) 설정 변경 방법 (2) | 2018.08.08 |