>> 문제
컬럼 정보
Person_id : 개인 식별 번호
person_name : 사람 이름
weight : 몸무게
turn : 버스에 탑승할 순서
조건
- 버스에는 turn순서별로 탑승함
- 버스 승차 제한 중량은 1000kg임 (중량 누적합이 1000kg이면 더 타면 사고남)
출력
- 마지막에 탄 운좋은 친구의 이름은?
>>예시
=> 누적합이 딱 1000이 되는 john Cena친구가 마지막 탑승자
문제풀기
1단계: 누적합 테이블 만들기
- turn으로 오름차순해줌
- 중량을 차례대로 더해나감
>> 출력값 : 본래 컬럼 + 누적 중량합
2단계: 1000까지만 컷하기
- 위의 테이블을 from 서브쿼리로 넣음
- where 조건절에 1000이하로 잡아줌
>> 출력값 : 위의 테이블에서 누적 중량이 1000이하인 사람들만 조회됨
3단계: 정렬과 limit를 활용한 쿼리문 완성
- 위의 테이블을 다시 서브쿼리에 넣고 cum_weight max값을 조회하여 이름을 찾을 수 있음
=> but, 서브쿼리를 한번 더 쓰기 귀찮음
=> 위의 테이블에서 바로 답을 찾을 순 없을까?
=> 정렬을 활용하자!
: 마지막에 타는 사람은 마지막 행에 위치하게 됨(cum_weight가 1000에 가장 가까움으로)
: 그럼 cum_weight의 정렬을 내림차순으로 바꾸면? => 맨 위에 위치하게 됨
: limit 1처리하면 바로 답이 포함된 행이 나옴.
>> 출력값
'데이터 분석 > SQL' 카테고리의 다른 글
[MYSQL] 1280. Students and Examinations / 카티션 곱(행렬 곱)/복합키 조인 (0) | 2023.07.24 |
---|---|
[MYSQL] 1321. Restaurant Growth/ lag 행을 통한 유동적인 누적합 (0) | 2023.07.24 |
[SQLite] 폐쇄할 따릉이 정류소 찾기1 / join 키 값 불일치 설정 (0) | 2023.05.28 |
[MYSQL] 550. Game Play Analysis IV / WITH절 임시 테이블 (0) | 2023.05.28 |
[MYSQL] Interviews /차근차근 결합하기 (0) | 2023.05.12 |