
역대급 문제네요..?? ㅋㅋㅋㅋ
TestCase가 너무 많아요...
일단 오늘은 여기까지 짰고 내일 다시 도오전
WITH T AS (
SELECT turn
, person_name
, weight
, (SELECT SUM(weight) FROM Queue Q2 WHERE Q2.turn <= Q1.turn) total_weight
FROM Queue Q1
ORDER BY turn
)
SELECT CASE WHEN COUNT(*) = 0
THEN (SELECT person_name FROM T ORDER BY turn DESC LIMIT 1)
ELSE person_name END person_name
FROM T
WHERE total_weight >= 1000
ORDER BY turn
LIMIT 1
데이터리안 복습자료 참고하니까 total_weight는 쉽게 구할 수 있었는데 !
난해하네요 ^^
나 자신 왜 이렇게 복잡하게 풀었었지..
제 답쿼리는요!
WITH T AS (
SELECT turn
, person_name
, weight
, (SELECT SUM(weight) FROM Queue Q2 WHERE Q2.turn <= Q1.turn) total_weight
FROM Queue Q1
ORDER BY turn
)
SELECT person_name
FROM T
WHERE total_weight <= 1000
ORDER BY turn DESC
LIMIT 1
근데 런타임이 긴 편이라 다른 사람 쿼리도 봅시다 !!
SELECT
q1.person_name
FROM Queue q1 JOIN Queue q2 ON q1.turn >= q2.turn
GROUP BY q1.turn
HAVING SUM(q2.weight) <= 1000
ORDER BY SUM(q2.weight) DESC
LIMIT 1
대박이에요.. 조인의 신 .. ㅋㅋㅋㅋ
런타임이 짧진 않지만 굉장히 깔끔한 쿼리입니다 👏👏👏