오랑우탄의 반란

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/

반응형