본문 바로가기
MYSQL/solvesql

멘토링 짝꿍 리스트

by 수스리 2025. 6. 16.

https://solvesql.com/problems/mentor-mentee-list/

 

https://solvesql.com/problems/mentor-mentee-list/

 

solvesql.com

문제

employees 테이블에는 어느 회사의 직원 정보가 들어있습니다. 각각의 데이터는 직원 ID, 직원의 이름, 입사일, 부서, 직속 상사의 ID로 구성되어있습니다.

회사에서 신규 입사자들의 빠른 적응을 돕기 위해 멘토링 프로그램을 운영하려고 합니다. 멘티가 될 신규 입사자들은 ‘2021년 12월 31일’을 기준으로 3개월 이내 입사한 인원 전체이며, 멘토는 ‘2021년 12월 31일’을 기준으로 재직한지 2년 이상이 된 직원들만 배정하려고 합니다. 또한 최대한 다양한 분야의 직원들이 서로 교류 할 수 있도록 서로 다른 부서에 속하는 직원끼리 멘토링을 진행하려고 합니다.

위 조건을 모두 만족하는 멘티-멘토 짝꿍 리스트를 계산하는 쿼리를 작성해주세요. 쿼리 결과에는 매칭 가능한 멘토가 없는 경우도 모두 포함되어야 합니다. 추가로 쿼리 결과는 멘티 ID를 기준으로 오름차순 정렬되어 있어야 하고, 멘티 1명에 대해 배정 가능한 멘토가 여러 명인 경우 멘토 ID로 오름차순 정렬되어 있어야 합니다.

정답 쿼리

WITH menti AS (SELECT *
FROM employees
WHERE join_date >= date('2021-12-31', '-3 months') AND
      join_date <= '2021-12-31'),
mento AS (
  SELECT *
  FROM employees
  WHERE join_date <= date('2021-12-31', '-2 years')
)
SELECT TI.employee_id AS mentee_id,
       TI.name AS mentee_name,
      TO2.employee_id AS mentor_id,
      TO2.name AS mentor_name
FROM menti TI
LEFT JOIN mento TO2 ON TI.department != TO2.department

뭐 쉬워서 더 할 말이 없다. 다만 처음에는 

WITH menti AS (SELECT *
FROM employees
WHERE strftime("%Y-%m-%d", join_date) >= '2021-10-30'),
mento AS (
  SELECT *
  FROM employees
  WHERE strftime("%Y-%m-%d", join_date) <= '2019-12-31'
)
SELECT TI.employee_id AS mentee_id,
       TI.name AS mentee_name,
      TO2.employee_id AS mentor_id,
      TO2.name AS mentor_name
FROM menti TI
LEFT JOIN mento TO2 ON TI.department != TO2.department

이렇게 하드코딩으로 짰다. 하지만 최적화로 함수를 썼다.

'MYSQL > solvesql' 카테고리의 다른 글

멀티 플랫폼 게임 찾기  (0) 2025.06.21
폐쇄할 따릉이 정류소 찾기 2  (1) 2025.06.19
지역별 주문의 특징  (0) 2025.06.06
백분율 계산 할때는 *100.0 하기  (0) 2025.06.02
우리 플랫폼에 정착한 판매자 1  (0) 2025.05.15