Algorithm

[해커랭크 HackerRank] Placements (Oracle)

잘될거야아마두 2021. 3. 19. 17:57

Placements | HackerRank

 

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

Advanced Join 문제이다!

 

STUDENTS 테이블은 학생, FRIENDS 테이블은 그들의 가장 친한 친구, 그리고 PACKAGES에는 그들의 월급 정보가 저장돼 있다. 이때, 베프가 본인보다 월급이 높은 학생의 이름을 출력해야 한다. 왜 이런 자해 행위를...

 

우선 학생과 베프를 찾아야 하기 때문에, ID로 조인을 건다.

그리고 월급 정보가 들어있는 PACKAGES를 두 번 사용하여 각각 학생과 친구의 월급을 조인을 걸어 찾는다.

여기까지 하면 친구의 ID와 내 월급, 그리고 친구의 월급을 알 수 있게 된다.

여기서 내 월급보다 친구의 월급이 낮은 행만 골라내면 조건을 모두 만족하게 된다.

SELECT S.NAME
FROM STUDENTS S, FRIENDS F, PACKAGES P1, PACKAGES P2
WHERE S.ID = F.ID
  AND S.ID = P1.ID
  AND F.FRIEND_ID = P2.ID
  AND P1.SALARY < P2.SALARY
ORDER BY P2.SALARY
;