[solvesql] 멘토링 짝꿍 리스트
출처
문제
employees
테이블에는 어느 회사의 직원 정보가 들어있습니다. 각각의 데이터는 직원 ID, 직원의 이름, 입사일, 부서, 직속 상사의 ID로 구성되어있습니다.
회사에서 신규 입사자들의 빠른 적응을 돕기 위해 멘토링 프로그램을 운영하려고 합니다. 멘티가 될 신규 입사자들은 ‘2021년 12월 31일’을 기준으로 3개월 이내 입사한 인원 전체이며, 멘토는 ‘2021년 12월 31일’을 기준으로 재직한지 2년 이상이 된 직원들만 배정하려고 합니다. 또한 최대한 다양한 분야의 직원들이 서로 교류 할 수 있도록 서로 다른 부서에 속하는 직원끼리 멘토링을 진행하려고 합니다.
위 조건을 모두 만족하는 멘티-멘토 짝꿍 리스트를 계산하는 쿼리를 작성해주세요. 쿼리 결과에는 매칭 가능한 멘토가 없는 경우도 모두 포함되어야 합니다. 추가로 쿼리 결과는 멘티 ID를 기준으로 오름차순 정렬되어 있어야 하고, 멘티 1명에 대해 배정 가능한 멘토가 여러 명인 경우 멘토 ID로 오름차순 정렬되어 있어야 합니다.
mentee_id
- 멘티 IDmentee_name
- 멘티 이름mentor_id
- 멘토 IDmentor_name
- 멘토 이름
풀이
- 문제 주제가 JOIN인데 다른방법을 사용한 것 같다.. 일단..
- 멘티와 멘토의 조건을 where 절에 작성
between and
와 연산자로 입사일 기준으로 멘티 멘토 나누기- 맨티 맨토 정렬하기
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
select
mte.employee_id as mentee_id,
mte.name as mentee_name,
mto.employee_id as mentor_id,
mto.name as mentor_name
from
employees mte,
employees mto
where
(mte.join_date between "2021-09-01" and "2021-12-31")
and (mto.join_date <= "2019.12.31")
and (mte.department != mto.department)
order by
mentee_id,
mentor_id
풀이 2
- JOIN문 사용해서 풀어도 보았다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
select
mte.employee_id as mentee_id,
mte.name as mentee_name,
mto.employee_id as mentor_id,
mto.name as mentor_name
from
(
select
employee_id,
name,
join_date,
department
from
employees
where
join_date >= date("2021-12-31", "-3 months")
-- join_date between "2021-09-01" and "2021-12-31"
order by
employee_id
) as mte
join employees mto on mto.department != mte.department
where
mto.join_date <= date("2021-12-31", "-2 years")
-- mto.join_date <= "2019.12.31"
order by
mentee_id,
mentor_id;