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