출처
문제
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 ->결과반환
- FROM 절:
- Students 테이블과 Friends 테이블을 각 id를 기준으로 조인 : 학생과 학생의 베프 연결
- Students 테이블을 Students 의 id와 Packages의 id를 기준으로 조인 : 학생과 학생의 급여 연결
- Friends 테이블을 Friends 의 id와 Packages의 id를 기준으로 조인 : 친구와 친구의 급여 연결
- WHERE 절: 친구의 급여가 학생의 급여보다 클 경우 필터링
- ORDER BY 절: 친구의 급여순
배운점
동일한 테이블을 여러번 조인하는 법 > 각 테이블의 별칭을 주어 섞이지 않게 해야 한다
'문제풀이 > SQL(My sql)' 카테고리의 다른 글
[문제풀이] Hacker Rank - Draw The Triangle 1, 2 (0) | 2024.06.20 |
---|---|
[문제풀이] Hacker Rank - Symmetric Pairs (0) | 2024.06.19 |
[문제풀이] Hacker Rank - Challenges (1) | 2024.06.18 |
[문제풀이] Hacker Rank - SQL Project Planning (0) | 2024.06.14 |
[문제풀이] Hacker Rank - Contest Leaderboard (0) | 2024.06.13 |