문제 출처 : https://solvesql.com/problems/mentor-mentee-list/
https://solvesql.com/problems/mentor-mentee-list/
solvesql.com
1. 문제
난이도3, 정답률 42.87%
employees 테이블에는 어느 회사의 직원 정보가 들어있습니다. 각각의 데이터는 직원 ID, 직원의 이름, 입사일, 부서, 직속 상사의 ID로 구성되어있습니다.
회사에서 신규 입사자들의 빠른 적응을 돕기 위해 멘토링 프로그램을 운영하려고 합니다. 멘티가 될 신규 입사자들은 ‘2021년 12월 31일’을 기준으로 3개월 이내 입사한 인원 전체이며, 멘토는 ‘2021년 12월 31일’을 기준으로 재직한지 2년 이상이 된 직원들만 배정하려고 합니다. 또한 최대한 다양한 분야의 직원들이 서로 교류 할 수 있도록 서로 다른 부서에 속하는 직원끼리 멘토링을 진행하려고 합니다.
위 조건을 모두 만족하는 멘티-멘토 짝꿍 리스트를 계산하는 쿼리를 작성해주세요. 쿼리 결과에는 매칭 가능한 멘토가 없는 경우도 모두 포함되어야 합니다. 추가로 쿼리 결과는 멘티 ID를 기준으로 오름차순 정렬되어 있어야 하고, 멘티 1명에 대해 배정 가능한 멘토가 여러 명인 경우 멘토 ID로 오름차순 정렬되어 있어야 합니다.
- mentee_id - 멘티 ID
- mentee_name - 멘티 이름
- mentor_id - 멘토 ID
- mentor_name - 멘토 이름
2. 조건
- 멘티는 2021년 12월 31일을 기준으로 3개월 이내에 입사한 인원 전체
- 멘토는 2021년 12월 31일을 기준으로 재직한지 2년 이상
- 멘티와 멘토는 서로 다른 부서여야 함
- 멘티의 직원 ID기준으로 오름차순
3. 쿼리
-- 멘티는 2021년 12월 31일을 기준으로 3개월 이내에 입사한 인원 전체
-- 멘토는 2021년 12월 31일을 기준으로 재직한지 2년 이상
-- 멘티 멘토는 서로 다른 부서에 속하는 인원끼리
WITH mentee AS(
SELECT *
FROM employees
WHERE join_date >= DATE('2021-12-31', '-3 months')
), mentor AS(
SELECT *
FROM employees
WHERE join_date <= DATE('2021-12-31', '-2 years')
)
SELECT
mte.employee_id AS mentee_id
,mte.name AS mentee_name
,mtr.employee_id AS mentor_id
,mtr.name AS mentor_name
FROM mentee AS mte
LEFT JOIN mentor AS mtr ON mte.employee_id != mtr.employee_id
WHERE mte.department != mtr.department
ORDER BY mte.employee_id ASC, mtr.employee_id ASC
멘티와 멘토가 한 테이블 안에 들어있는 직원 데이터를 기준으로 구해야 하기 때문에 CTE를 사용하여 멘토와 멘티를 따로 구해준 뒤 LEFT JOIN하는 방식으로 진행하였다.
WHERE절에서 서로 다른 부서를 매칭해주기 위해서 멘토와 멘티의 부서가 일치하지 않도록 !=를 사용하여 구해준다.
4. 실행 결과
'solvesql - SQL문제' 카테고리의 다른 글
solvesql - 가구 판매의 비중이 높았던 날 찾기(GROUP BY, CASE) (0) | 2024.11.24 |
---|---|
solvesql - 쇼핑몰의 일일 매출액과 ARPPU(Group by) (0) | 2024.11.20 |
solvesql - 배송 예정일 예측 성공과 실패(Case, Group by) (0) | 2024.11.14 |
solvesql - 지역별 주문의 특징(Case) (0) | 2024.11.13 |
solvesql - 할부는 몇 개월로 해드릴까요(Group by) (0) | 2024.11.12 |