오랑우탄의 반란
LeetCode 리트코드 | 1204. Last Person to Fit in the Bus (MySQL) 윈도우 함수 본문
SQL/LeetCode
LeetCode 리트코드 | 1204. Last Person to Fit in the Bus (MySQL) 윈도우 함수
5&2 2024. 7. 23. 11:23반응형
오늘도 오랑이는 문제를 풉니다.
1204. Last Person to Fit in the Bus
풀이 과정
turn 기준으로 정렬한 것에 대한 각 weight 의 누적합이 필요한 문제입니다.
누적합을 구할 수 있는 방법은 self join 으로 sum, group by 하는 방법과, sum() over() window function 을 사용하는 방법 크게 두 가지가 있습니다.
누적합 윈도우 함수
SELECT column1, column2, SUM(더할 칼럼) OVER (ORDER BY 정렬기준) as CumulativeSum
FROM table_name;
사용예시
SELECT Date, Sales, SUM(Sales) OVER (ORDER BY Date) as CumulativeSales
FROM daily_sales;
앞서 언급한 self join 을 활용하는 방법도 있습니다.
SELECT d1.Date, d1.Sales, SUM(d2.Sales) as CumulativeSales
FROM daily_sales d1 JOIN daily_sales d2 ON d1.Date >= d2.Date
GROUP BY d1.Date, d1.Sales
ORDER BY d1.Date;
오랑이는 더 간단한 방법인 윈도우 함수로 해당 문제를 풀었습니다.
select sum(weight) over(order by turn) as total_weight from queue
해당 칼럼을 from 서브쿼리로 넣어서 total_weight 이 1000을 초과하는 결과들에 대해,
total_weight 내림차순으로 정렬 후 하나의 결과만 표시되도록 합니다.
최종 코드
select person_name
from (select person_name, sum(weight) over (order by turn) as total_weight from queue) a
where total_weight <= 1000
order by total_weight desc
limit 1
오랑우탄이 영어를 하고 오랑이가 쿼리마스터가 되는 그날까지~
https://leetcode.com/problems/last-person-to-fit-in-the-bus/description/
반응형