본문 바로가기
TIL - 프로그래밍/SQL

조건에 맞는 값들을 묶어서 출력하기 - GROUP_CONCAT()

by chaemj97 2024. 7. 2.
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;

 

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

댓글