https://www.hackerrank.com/challenges/placements/problem?isFullScreen=true
Column | Type |
ID | Integer |
Name | String |
Students 테이블:
- ID : 학생의 id
- Name : 학생의 이름
Column | Type |
ID | Integer |
Friend_ID | Integer |
Friends 테이블:
- ID : 학생의 id
- Friend_ID : 그 학생과 가장 친한 친구의 id
Column | Type |
ID | Integer |
Salary | Float |
Packages 테이블:
- ID : 학생의 id
- Salary : 제안받은 급여
자신의 가장 친한 친구가 자신보다 더 높은 급여를 제안받은 학생들의 이름을 출력하는 쿼리를 작성하세요. 이름은 가장 친한 친구에게 제안된 급여 금액을 기준으로 정렬되어야 합니다. 두 학생이 동일한 급여 제안을 받은 경우는 없다고 보장됩니다.
select
f.ID,
my.Salary,
f.Friend_ID,
fri.Salary
from Friends f
left join Packages my on f.ID = my.ID
left join Packages fri on f.Friend_ID = fri.ID
학생과 친구가 제안받은 급여를 알아내기 위해 Friends 테이블에 Packages 테이블을 각각 학생의 id, 친구의 id를 기준으로 두번 결합한다.
select
f.ID,
my.Salary,
f.Friend_ID,
fri.Salary
from Friends f
left join Packages my on f.ID = my.ID
left join Packages fri on f.Friend_ID = fri.ID
where fri.Salary > my.Salary
where절을 사용해서 친구가 더 많은 급여를 제안받은 학생들만 출력한다.
select *
from
Students s
inner join
(select
f.ID,
my.Salary my_salary,
f.Friend_ID,
fri.Salary friend_salary
from Friends f
left join Packages my on f.ID = my.ID
left join Packages fri on f.Friend_ID = fri.ID
where fri.Salary > my.Salary) sal on s.ID = sal.ID
위의 쿼리를 Students테이블과 결합해서 친구보다 더 적은 급여를 제안받은 학생들의 이름을 구한다.
select
s.Name
from
Students s
inner join
(select
f.ID,
my.Salary my_salary,
f.Friend_ID,
fri.Salary friend_salary
from Friends f
left join Packages my on f.ID = my.ID
left join Packages fri on f.Friend_ID = fri.ID
where fri.Salary > my.Salary) sal on s.ID = sal.ID
order by sal.friend_salary
학생의 이름을 출력하도록 하고 친구가 제안받은 급여를 기준으로 정렬하면 완료!
'코딩일기' 카테고리의 다른 글
SQL 코드카타 178 - Symmetric Pairs (0) | 2024.07.30 |
---|---|
알고리즘 코드카타 120 - 멀쩡한 사각형 (0) | 2024.07.29 |
알고리즘 코드카타 119 - 숫자 카드 나누기 (0) | 2024.07.28 |
SQL 코드카타 176 - SQL Project Planning (0) | 2024.07.28 |
SQL 코드카타 175 - Contest Leaderboard (0) | 2024.07.27 |