안녕하세요!
이번 포스팅은 LeetCode에 있는 Top Travellers 문제를 OracleDB로 풀어보려고 합니다!
(모든 문제는 Oracle로 풀이하겠습니다.)
1. 문제 링크 : https://leetcode.com/problems/top-travellers/description/
2. 문제
| Column name | Type |
| id | int |
| name | varchar |
| Column name | Type |
| id | int |
| user_id | int |
| distance | int |
[문제] Write a solution to report the distance traveled by each user.
Return the result table ordered by travelled_distance in descending order, if two or more users traveled the same distance, order them by their name in ascending order.
각 사용자가 이동한 거리를 조회하는 문제입니다.
3. 제출 쿼리 및 설명
1) USERS 테이블과 RIDES 테이블을 조인하고 각 회원 별로 총 이동거리를 합산한 값을 조회합니다.
USERS 테이블의 모든 회원의 이동거리를 조회하기 위해서 LEFT JOIN 합니다.
SELECT U.ID, U.NAME, SUM(R.DISTANCE) AS T
FROM USERS U, RIDES R
WHERE U.ID = R.USER_ID(+)
GROUP BY U.ID, U.NAME
2) 만약에 LEFT JOIN을 했을 때, RIDES 테이블에 이동한 거리가 없어서 NULL 값이라면 대신 0으로 바꿔서 조회합니다.
SELECT NAME, NVL(TOTAL_DISTANCE, 0) AS TRAVELLED_DISTANCE
FROM (
SELECT U.ID, U.NAME, SUM(R.DISTANCE) AS TOTAL_DISTANCE
FROM USERS U, RIDES R
WHERE U.ID = R.USER_ID(+)
GROUP BY U.ID, U.NAME
)
ORDER BY TRAVELLED_DISTANCE DESC, NAME ASC
;
'SQL > LeetCode' 카테고리의 다른 글
| [SQL] Patients With a Condition(LeetCode/Oracle) (0) | 2023.10.26 |
|---|---|
| [SQL] Group Sold Products By The Date(LeetCode/Oracle) (0) | 2023.10.26 |
| [SQL] Capital Gain/Loss(LeetCode/Oracle) (0) | 2023.10.26 |
| [SQL] Movie Rating(LeetCode/Oracle) (0) | 2023.10.23 |
| [SQL] List the Products Ordered in a Period(LeetCode/Oracle) (0) | 2023.10.23 |