[SQL #111]1204. Last Person to Fit in the Bus

Gi Woon Lee·2024년 8월 22일

SQL

목록 보기
9/33

1204. Last Person to Fit in the Bus

컨셉:

버스 탑승 가능 최대 무게가 1000kg이다

문제:

가장 마지막에 탑승한 사람이 누군지 구하라

input 테이블의 데이터를 turn(탑승순서) 순서로 오름차순 정렬하고 turn에 따른 weight 누적합을 total weight 칼럼에 정리하면 explanation 테이블이 나온다.

전략:

  1. Turn 순서대로 Weight를 더해준다.
  2. 1000 미만 수를 잘라낸다.
  3. limit 1 을 통해 1000 이상의 첫 번째 값을 반환한다.
with cum_table as(
    select
        sum(weight) over(order by turn) as 'cumulative',
        turn,
        person_name
    from queue
)

select person_name
from cum_table
where cumulative <= 1000
order by turn desc
limit 1 

1: CTE를 활용하여 cumulative(누적합 칼럼), turn(탑승순서), person_name으로 구성된 테이블 하나를 만들어 주었다.

2: 누적 무게가 1000이하의 값들로 filtering해준 뒤 내림차순으로 정렬했다. -> 1000이하 조건을 충족하는 가장 큰 누적합 데이터가 가장 첫 번째 행에 위치하게 된다.

3: limit 1을 통해 첫 번째 행만 반환한다.

0개의 댓글