SQL/문제풀이

[LeetCode] last-person-to-fit-in-the-bus 📌

응엉잉 2024. 3. 20. 15:58

https://leetcode.com/problems/last-person-to-fit-in-the-bus/?envType=study-plan-v2&envId=top-sql-50

 

누적합을 어떻게 구해야하는지 몰라서 문제에 접근을 못했다!

 

1. JOIN 이용

SELECT *
FROM Queue a
    JOIN Queue b ON a.turn >= b.turn
ORDER BY a.turn, b.turn

 

ex) a의 turn이 2 --> turn이 1, 2인 row가 JOIN 됨

 

2. a.turn으로 GROUP BY 후 해당 순서의 누적 weight를 구하기 위해 SUM(b.weight)를 계산

HAVING절에 1000 이하라는 조건을 걸어주고

누적 weight가 가장 큰 순서대로 정렬한다

이때 a.person_name이 마지막으로 탄 사람일테니 LIMIT 1을 걸어준다

SELECT a.person_name
FROM Queue a
    JOIN Queue b ON a.turn >= b.turn
GROUP BY a.turn
HAVING SUM(b.weight) <= 1000
ORDER BY SUM(b.weight) DESC
LIMIT 1

 

누적합을 구할 때 순서를 기준으로 조건을 걸어서 JOIN을 해줘야한다는걸 알았다.