코드카타
[해커랭크] Placements
PARK JI HO
2024. 1. 24. 21:12
- Students 테이블은 ID와 NAME
- Friends 테이블은 ID와 가장 친한 친구 ID
- Packages 테이블은 ID와 Salary
문제 :가장 친한 친구가 자신보다 더 높은 연봉을 제안받은 학생의 이름을 출력, 정렬은 가장 친한 친구의 급여 순
1. students 테이블과 friends 테이블을 조인해서 가장 친한 친구를 조회
select *
from students s
inner join friends f on s.id = f.id
2. 내 급여와 가장 친한 친구의 급여의 비교를 위해 packages 테이블 조인
select *
from students s
inner join friends f on s.id = f.id
inner join packages p1 on s.id = p1.id -- 내 급여
inner join packages p2 on f.friend_id = p2.id -- 가장 친한 친구 급여
s1.id = p1.id는 나의 급여 매칭
f.friend_id = p2.id는 가장 친한 친구의 급여 매칭
3. 이제 내 급여와 친구 급여를 비교해서 친구 급여가 더 높은 경우만 조회
친구 급여 순으로 정렬
select name
from students s
inner join friends f on s.id = f.id
inner join packages p1 on s.id = p1.id -- 내 급여
inner join packages p2 on f.friend_id = p2.id -- 가장 친한 친구 급여
where p1.salary < p2.salary -- 내 급여와 친구 급여 비교
order by p2.salary
self join은 아직 감이 잘 안온다... 이 문제도 self join을 사용하는 건지 아닌지 헷갈렸다..
그래서 각 테이블을 하나하나 조회했다.
select *
from students s inner join friends f on s.id = f.id
위 쿼리를 실행하면
ID, name / ID, friend_ID 형식의 테이블이 나오는데
여기서 packages 테이블의 salary를 students의 id와 friends의 friid를 매칭시켜주고 서로 비교하면 될 거 같다는 생각이 들었다.
SELF JOIN에 더 익숙해질 필요가 있다..