코딩테스트/SQL 코드카타
MySQL 해커랭크 | Placements (자신과 친한 친구의 급여 비교하기)
ANNASENA
2024. 8. 28. 08:00
728x90
문제
https://www.hackerrank.com/challenges/placements/problem?isFullScreen=true
Placements | HackerRank
Write a query to output the names of those students whose best friends got offered a higher salary than them.
www.hackerrank.com
- Write a query to output the names of those students whose best friends got offered a higher salary than them.
- Names must be ordered by the salary amount offered to the best friends.
- It is guaranteed that no two students got same salary offer.
# 문제 해석
- 친한 친구가 자신보다 높은 급여를 받는 경우에 해당하는 학생들의 이름 조회하기
- 이름은 자신의 친한 친구가 받는 급여 크기로 정렬하기
테이블
Students 테이블 | Friends 테이블 | Packages 테이블 |
![]() |
![]() |
![]() |
풀이과정
# 가상테이블 fs 생성
- 세 테이블을 ID를 기준으로 INNER JOIN함
- FROM절에 조인할 테이블을 모두 넣고, WHERE절에 조건을 넣어주면 INNER JOIN됨
- ID와 이름, 급여, 친한 친구ID까지 SELECT문에 조회해줌
- 나중에 친한 친구ID에 해당하는 친구의 급여를 Packages 테이블에서 한 번 더 조인해줄 것이기 때문
1 2 3 4 5 6 | WITH fs AS( SELECT s.ID, s.Name, p.Salary, f.Friend_ID FROM Students s, Friends f, Packages p WHERE s.ID = f.ID AND f.ID = p.ID ) SELECT * FROM fs | cs |
# 내 ID, 내 이름, 내 급여 | 친구 ID, 친구 급여
- 내 급여와 친구 급여를 한 눈에 볼 수 있게 한 번 다같이 조회해봄
1 2 3 4 5 6 7 | WITH fs AS( SELECT s.ID, s.Name, p.Salary, f.Friend_ID FROM Students s, Friends f, Packages p WHERE s.ID = f.ID AND f.ID = p.ID ) SELECT fs.*, p.Salary FROM fs JOIN Packages p ON fs.Friend_ID = p.ID | cs |
# 정답
- 가상 테이블과 Packages 테이블을 조인해 친한 친구의 급여도 알 수 있게 만듦
- WHERE절에서 자신의 급여보다 친한 친한 친구의 급여가 높은 경우를 조건으로 주어 레코드 필터링
- 급여 기준으로 정렬
1 2 3 4 5 6 7 8 9 | WITH fs AS( SELECT s.ID, s.Name, p.Salary, f.Friend_ID FROM Students s, Friends f, Packages p WHERE s.ID = f.ID AND f.ID = p.ID ) SELECT fs.Name FROM fs JOIN Packages p ON fs.Friend_ID = p.ID WHERE fs.Salary < p.Salary ORDER BY p.Salary | cs |
728x90