240609_TIL

J Lee·2024년 6월 9일

아무리 사소하더라도 배움이 없는 날은 없다.

SQL 코드카타 177번
3개 테이블을 조인하는 문제.
'친구의 급여가 내 급여보다 높은' 사람의 이름을 뽑으면 된다.

먼저 내 급여를 알기 위해
Students 테이블과 Packages 테이블을 조인한다.

select s.name
from Students s
left join Packages p on s.id = p.id

그리고 각각의 학생에 대해 누가 친구인지 알아야 하므로
Friends 테이블을 학생id에 대해 left join한다.

select s.name
from Students s
left join Packages p on s.id = p.id
left join Friends f on s.id = f.id

이제 친구의 급여와 내 급여를 비교하는 조건이 들어가야 하므로
Packages 테이블을 한 번 더 left join해 준다.
이 때의 조건은 (친구의 급여를 알아야 하므로) friends.id = p2.id인 점에 주의.

select s.name
from Students s
left join Packages p on s.id = p.id
left join Friends f on s.id = f.id
left join Packages p2 on f.friend_id = p2.id

이제 조인은 모두 끝났으니
내 급여보다 친구의 급여가 더 크다는 조건을 where절에 명시하고
친구의 급여 순으로 정렬해 주면 끝.

아래는 정답 쿼리.

SELECT s.name
FROM   students s
       LEFT JOIN packages p
              ON s.id = p.id
       LEFT JOIN friends f
              ON s.id = f.id
       LEFT JOIN packages p2
              ON f.friend_id = p2.id
WHERE  p2.salary > p.salary
ORDER  BY p2.salary 

profile
기본기를 소홀히 하지 말자

0개의 댓글