728x90
GROUP_CONCAT()
- 그룹 내에서 열 값을 결합하여 하나의 문자열로 반환
- 기본 구분자는 쉼표(,)
GROUP_CONCAT([DISTINCT] expr [,expr ...]
[ORDER BY {unsigned_integer | col_name | expr} [ASC | DESC] [,col_name ...]]
[SEPARATOR str_val])
- DISTINCT: 중복된 값을 제거
- expr: 결합할 열
- ORDER BY: 결합할 열의 정렬 순서 지정
- SEPARATOR: 결합할 열 사이에 삽입할 구분자를 지정
EX)
DROP TABLE IF exists SYS.CLASS;
CREATE TABLE sys.CLASS
(TEAM VARCHAR(10) NOT NULL,
MEMBER VARCHAR(10) NOT NULL
);
insert into sys.class (TEAM, MEMBER)
values
('A', 'APPLE'),
('A', 'ANT'),
('B', 'BANANA'),
('B', 'BUS'),
('C', 'CAT'),
('C', 'CAMERA'),
('C', 'COST'),
('A', 'APPLE');
select * from sys.class;
1. 기본 사용 - "같은 TEAM" MEMBER끼리 묶기
해당 쿼리에서 가장 중요한 것은 GROUP BY, 왜냐하면 '같은팀'으로 묶어주기 위한'기준'이 되기 때문
select TEAM
, group_concat(MEMBER) as '같은 팀 멤버'
from SYS.CLASS
group by TEAM;
2. 구분자 변경
문자열 사이를 구분해주는 구분자를 변경하고 싶을 때는 SEPARETOR '원하는 구분자'를 사용
select TEAM
, group_concat(member SEPARATOR '-') as '같은 팀 멤버'
from SYS.CLASS
group by TEAM;
3. 중복되는 문자열이 있을 때 DISTINCT 사용
select TEAM
, group_concat(distinct member SEPARATOR '-') as '같은 팀 멤버'
from SYS.CLASS
group by TEAM;
4. 문자열 정렬이 필요할 때 ORDER BY 사용
(해당 데이터 만들 때부터 정렬되어서 눈에 결과는 동일..)
select TEAM
, group_concat(distinct member order by member SEPARATOR '-') as '같은 팀 멤버'
from SYS.CLASS
group by TEAM;
DISTINCT > ORDER BY > SEPARATOR 순서!!
728x90
반응형
'TIL - 프로그래밍 > SQL' 카테고리의 다른 글
MySQL 곱셈 구하기 (0) | 2024.07.02 |
---|---|
MySQL 공백/문자 제거 - TRIM() (0) | 2024.07.02 |
[DBeaver] MySQL 연결 (오류 해결) (1) | 2024.07.02 |
[CodeSignal] security Breach - MySQL (0) | 2024.06.28 |
[해커랭크] Interviews - MySQL (0) | 2024.06.14 |
댓글