Contents
내가 작성한 쿼리
버스 탑승을 기다리는 사람들이 줄을 서 있습니다.
하지만 버스의 무게 제한이 1000킬로그램이기 때문에 탑승하지 못하는 사람들도 있을 수 있습니다.
무게 제한을 초과하지 않고 버스에 탈 수 있는 마지막 사람의 person_name을 찾기 위한 솔루션을 작성합니다.
첫 번째 사람이 무게 제한을 초과하지 않도록 테스트 케이스가 생성됩니다.
버스는 한 번에 한 사람만 탑승할 수 있습니다.
내가 작성한 쿼리
Oracle
-- 탑승 순서대로 총 무게를 더해가는 CTE
WITH weight_queue AS(
SELECT
person_name,
SUM(weight) OVER (ORDER BY turn) AS Total_Weight
FROM Queue
ORDER BY total_weight DESC
)
SELECT person_name
FROM weight_queue
WHERE total_weight <= 1000
AND ROWNUM = 1;
---------- CTE 없이
SELECT person_name
FROM (
-- CTE에서 하던 작업을 서브쿼리로 이동
SELECT
person_name,
sum(weight) OVER (ORDER BY turn) sum_weight
FROM queue
ORDER BY sum_weight DESC
)
WHERE sum_weight <= 1000 AND rownum = 1
MySQL
-- 탑승 순서대로 총 무게를 더해가는 CTE
WITH weight_queue AS(
SELECT
person_name,
SUM(weight) OVER (ORDER BY turn) AS Total_Weight
FROM Queue
ORDER BY total_weight DESC
)
SELECT person_name
FROM weight_queue
WHERE Total_Weight <= 1000
LIMIT 1;
차이점
- 출력 개수 제한두는 방식의 차이
Share article