공부/SQL
mysql > group_concat
shining park
2025. 4. 27. 22:44
❓실습문제를 푸는데 나와 강사님의 코드가 다른 부분 (group_concat)이 있어 공부하고자 작성
❗group by 와 함께 데이터를 보기 좋게 묶어 보여줄 수 있으므로 사용 연습 필요
# ✅10. 같은 부서에 근무하는 직원들의 사원명, 부서명, 동료이름을 조회하시오. (self join 사용)
select e1.EMP_NAME, d.DEPT_TITLE, e2.EMP_NAME as 동료이름
from (employee e1, department d) join employee e2
on e1.DEPT_CODE = e2.DEPT_CODE
where e1.DEPT_CODE = d.DEPT_ID
and e1.EMP_NO != e2.EMP_NO;
-- Teacher's Query
-- version 1
select
e.emp_name 사원명,
d.dept_title 부서명,
c.emp_name 동료사원명
from
employee e
join employee c on (e.dept_code = c.dept_code and e.emp_id != c.emp_id)
join department d on e.dept_code = d.dept_id;
-- version 2 : 스칼라 서브쿼리, group_concat 사용
select
dept_code,
(select dept_title from department where dept_id = e.dept_code) dept_title,
group_concat(emp_name SEPARATOR ',')
from
employee e
group by
dept_code;
✅ 개념
GROUP_CONCAT은 GROUP BY로 묶인 그룹 안의 문자열들을 하나로 합쳐주는 집계 함수
실습문제에서 같은 그룹(예: 부서) 내의 여러 이름을 쉼표 등으로 이어서 한 줄로 출력해줄 수 있음
✅ 특징
- GROUP_CONCAT(emp_name SEPARATOR ',')
- 부서별로 emp_name을 전부 합쳐서, 쉼표(,)로 구분해서 한 줄 문자열로 만들어 줄 수 있음
- ex) 홍길동,김철수,이영희
✅ 결과
D1 | 인사팀 | 김영희,홍길동,박민수 |
D2 | 개발팀 | 이지훈,조수빈 |
✅ 추가
- 구분자(Separator) 바꾸기
- GROUP_CONCAT(emp_name SEPARATOR ' / '); → 김영희 / 홍길동 / 박민수
- 옵션이 주어지지 않을 경우, 기본값은 " , "
- group_concat 의 결과 문자열이 길 경우
- SET SESSION group_concat_max_len = 10000; → group_concat_max_len의 값을 늘려야 함
- mysql의 기본 설정으로는 문자열 1024까지 출력 가능