본문 바로가기

데이터 분석/SQL

[MYSQL] 1204. Last Person to Fit in the Bus

>> 문제

 

컬럼 정보

Person_id : 개인 식별 번호

person_name : 사람 이름

weight : 몸무게

turn : 버스에 탑승할 순서

 

조건

- 버스에는 turn순서별로 탑승함

- 버스 승차 제한 중량은 1000kg임 (중량 누적합이 1000kg이면 더 타면 사고남)

 

출력

- 마지막에 탄 운좋은 친구의 이름은?

 

>>예시

and he's name is John~~ C~ena

=> 누적합이 딱 1000이 되는 john Cena친구가 마지막 탑승자

 


문제풀기

 

1단계: 누적합 테이블 만들기

- turn으로 오름차순해줌

- 중량을 차례대로 더해나감

>> 출력값 : 본래 컬럼 + 누적 중량합


2단계: 1000까지만 컷하기

- 위의 테이블을 from 서브쿼리로 넣음

- where 조건절에 1000이하로 잡아줌

>> 출력값 : 위의 테이블에서 누적 중량이 1000이하인 사람들만 조회됨


3단계: 정렬과 limit를 활용한 쿼리문 완성

- 위의 테이블을 다시 서브쿼리에 넣고 cum_weight max값을 조회하여 이름을 찾을 수 있음

=> but, 서브쿼리를 한번 더 쓰기 귀찮음

=> 위의 테이블에서 바로 답을 찾을 순 없을까?

=> 정렬을 활용하자! 

: 마지막에 타는 사람은 마지막 행에 위치하게 됨(cum_weight가 1000에 가장 가까움으로)

: 그럼 cum_weight의 정렬을 내림차순으로 바꾸면? => 맨 위에 위치하게 됨

: limit 1처리하면 바로 답이 포함된 행이 나옴.

 

>> 출력값