본문 바로가기
문제풀이/SQL(My sql)

[문제풀이] Hacker Rank - Placements

by kime2 2024. 6. 18.
출처
 

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

 

 

문제

You are given three tables: Students, Friends and Packages. Students contains two columns: ID and Name. Friends contains two columns: ID and Friend_ID (ID of the ONLY best friend). Packages contains two columns: ID and Salary (offered salary in $ thousands per month).

 

문제에 대한 해석

조회 : 이름

조건 : 학생의 급여보다 친구의 급여가 더 큰 경우

정렬: 친구의 급여순

주어진 테이블 만들고자 하는 테이블
나(학생) 친구 급여(나+친구) 내 급여 내 친구 친구 급여

 

풀이(MYSQL)

select  s.name
from Students s join Friends f
on s.id = f.id
join Packages p
on s.id = p.id
join Packages fp
on f.friend_id = fp.id
where  fp.salary >  p.salary
order by fp.salary
-- left말고 inner 조인해도 동일한 결과

 

작동순서

💡SQL 실행 순서는 From -> Where -> Group by -> Having -> Select -> Order by ->결과반환

  1. FROM 절
    1. Students 테이블과 Friends 테이블을 각 id를 기준으로 조인 : 학생과 학생의 베프 연결
    2. Students 테이블을 Students 의 id와 Packages의 id를 기준으로 조인 : 학생과 학생의 급여 연결
    3. Friends 테이블을 Friends  의 id와 Packages의 id를 기준으로 조인 : 친구와 친구의 급여 연결
  2. WHERE 절: 친구의 급여가 학생의 급여보다 클 경우 필터링 
  3. ORDER BY 절: 친구의 급여순

배운점

동일한 테이블을 여러번 조인하는 법 > 각 테이블의 별칭을 주어 섞이지 않게 해야 한다