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을 해줘야한다는걸 알았다.
'SQL > 문제풀이' 카테고리의 다른 글
[LeetCode] investments-in-2016 📌 (0) | 2024.03.26 |
---|---|
[LeetCode] exchange-seats 📌 (0) | 2024.03.20 |
[LeetCode] count-salary-categories (0) | 2024.03.09 |
[LeetCode] product-price-at-a-given-date 📌 (0) | 2024.03.09 |
[LeetCode] primary-department-for-each-employee (0) | 2024.03.09 |