1. 문제 설명
멘토,멘티 정의
- 멘티 : 3개월 이내 입사한 인원 전체
- 멘토 : 재직한지 2년이상된 직원
- 기준날짜 : 2021년 12월 31일 기준으로
조건
- 조건 1) 멘토와 멘티는 다른 부서여야한다.
- 조건 2) 매칭 가능한 멘토가 없는 경우도 모두 포함
- 조건 3) 멘티id기준 ASC, 멘티1명에 대해 배정 가능한 멘토다 여러명인 경우 멘토 id 기준 ASC
2. 풀이
WITH mentee AS (
SELECT employee_id, name, department
FROM employees
WHERE join_date BETWEEN DATE_SUB('2021-12-31', INTERVAL 3 MONTH)
AND '2021-12-31'
),
mentor AS (
SELECT employee_id, name, department
FROM employees
WHERE join_date <= DATE_SUB('2021-12-31', INTERVAL 2 YEAR)
)
SELECT
m.employee_id AS mentee_id,
m.name AS mentee_name,
t.employee_id AS mentor_id,
t.name AS mentor_name
FROM mentee m
LEFT JOIN mentor t
ON m.department <> t.department
ORDER BY mentee_id ASC, mentor_id ASC;
3. ON : 어떤 관계를 만족하면 붙어라
✅ JOIN = 규칙으로 짝짓기
- ON 절은 “두 테이블의 데이터를 어떤 기준으로 연결할지”를 쓰는 곳.
- 꼭 같은 값(=)이 아니어도 된다.
예를 들어- a.id = b.id → 같은 값끼리
- a.salary > b.salary → 급여가 더 큰 경우
- a.department <> b.department → 서로 다른 부서끼리
✅ LEFT JOIN을 쓴 이유
- 멘티가 기준이니까,
“멘토가 있든 없든 모든 멘티를 결과에 포함해야 함”
→ 그래서 LEFT JOIN.
(INNER JOIN이면 멘토가 없으면 결과에서 사라짐.)
✅ ON m.department <> t.department 으로 “부서가 다르다”는 규칙
멘티 한 명이 여러 부서에 속한 멘토들과 모두 매칭될 수 있다
✅ 예시로 이해하기
더보기
🧱 mentee 테이블
| mentee_id | department |
| 1 | HR |
| 2 | IT |
🧱 mentor 테이블
| mentor_id | department |
| 101 | HR |
| 102 | IT |
| 103 | Design |
| 104 | Marketing |
🔄 LEFT JOIN ON m.department <> t.department 결과
| mentee_id | mentee_dept | mentor_id | mentor_dept |
| 1 | HR | 102 | IT |
| 1 | HR | 103 | Design |
| 1 | HR | 104 | Marketing |
| 2 | IT | 101 | HR |
| 2 | IT | 103 | Design |
| 2 | IT | 104 | Marketing |
'코딩 테스트 > 02. SQL' 카테고리의 다른 글
| (solvesql) Advent of SQL 2025 5일차 (0) | 2025.12.08 |
|---|---|
| [solvesql_Lv3] 미세먼지 수치의 계절간 차이(중앙값구하기) (0) | 2025.10.14 |
| [solvesql_Lv3] 작품이 없는 작가 찾기 (0) | 2025.10.13 |
| [solvesql]MySQL_2(Lv2) (1) | 2025.10.12 |
| [solvesql_Lv2] 제목이 모음으로 끝나지 않는 영화 (0) | 2025.10.12 |