03/02 SQL ๋ฌธ์ œํ’€์ด - 1204. Last Person to Fit in the Bus (Leetcode) ๐ŸŒŸ๐ŸŒŸ

Data Architect / Engineerยท2024๋…„ 3์›” 2์ผ
1

1์ผ_1SQL

๋ชฉ๋ก ๋ณด๊ธฐ
43/63
post-thumbnail

๋ฌธ์ œ

  • LeetCode SQL ๋ฌธ์ œ
  • 1204. Last Person to Fit in the Bus / Medium
  • ๋ฌธ์ œ ๋‚ด์šฉ : [๋งํฌ]


๋‚ด๊ฐ€ ์ž‘์„ฑํ•œ Query

with temp_01 as(
select turn, person_id, person_name, weight
    ,sum(weight) over(order by turn) as total_weight
from queue
)
select distinct last_value(person_name)
		over(order by total_weight
        	rows between unbounded preceding and unbounded following) as person_name
from temp_01
where total_weight <= 1000
  • window function์„ ํ†ตํ•ด ์ „์ฒด ๋ฐ์ดํ„ฐ ๊ธฐ์ค€(window) turn ์ˆœ์„œ๋Œ€๋กœ weight์˜ ํ•ฉ์„ ๊ตฌํ•ด Total_Weight์ด๋ผ๋Š” ์ปฌ๋Ÿผ์— ์ถœ๋ ฅํ•ด์ค€๋‹ค.

  • ์œ„์˜ Explanation์˜ ํ…Œ์ด๋ธ”๊ณผ ๊ฐ™์€ ๋‚ด์šฉ์ด ์ถœ๋ ฅ๋œ๋‹ค. ์ด๋ฅผ temp_01๋กœ ์ €์žฅํ•œ๋‹ค.

  • WHERE์กฐ๊ฑด์— total_weight <= 1000์ธ ์กฐ๊ฑด์„ ์ฃผ์–ด ๋ฒ„์Šค ๋ฌด๊ฒŒ ์ œํ•œ์„ ์ดˆ๊ณผํ•˜์ง€ ์•Š๋Š” ๋ฐ์ดํ„ฐ๋งŒ ์ถœ๋ ฅ๋˜๋„๋ก ํ•„ํ„ฐ๋งํ•œ๋‹ค.

  • ํ•„ํ„ฐ๋ง ๋œ ๋ฐ์ดํ„ฐ์˜ ๊ฐ€์žฅ ๋งˆ์ง€๋ง‰ ๊ฐ’์˜ person_name์„ ๊ตฌํ•ด์ค€๋‹ค. ์ด๋ฅผ ์œ„ํ•ด last_valueํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๊ณ , ๋ฐ์ดํ„ฐ ์ „์ฒด ์ง‘ํ•ฉ์—์„œ total_weight๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋งˆ์ง€๋ง‰ ์ง‘ํ•ฉ์„ ๊ตฌํ•ด์•ผ ํ•˜๋ฏ€๋กœ, over(order by total_weight rows between unbounded preceding and unbounded following)์„ ์‚ฌ์šฉํ•ด์ค€๋‹ค.

  • distinct๋ฅผ ํ†ตํ•ด unique ํ•œ ์‚ฌ๋žŒ์˜ ์ด๋ฆ„๋งŒ ์ถœ๋ ฅํ•ด์ค€๋‹ค. (๋งˆ์ง€๋ง‰ ํƒ‘์Šน์ž ์ด๋ฆ„)

๐ŸŒŸ๐ŸŒŸ window function, last_value()๋ฅผ ์ ์šฉํ•ด๋ณผ ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ œ์˜€๋‹ค.
์ „์ฒด ๋ฐ์ดํ„ฐ์ง‘ํ•ฉ(window) ๊ธฐ์ค€์œผ๋กœ, ๋งˆ์ง€๋ง‰ ํƒ‘์Šน์ž ๊ฐ’์ด ํ–‰๋งˆ๋‹ค ์ถœ๋ ฅ๋˜๋ฏ€๋กœ, distinct๋ฅผ ํ†ตํ•ด 1๊ฐ€์ง€ ๋ฐ์ดํ„ฐ๋งŒ ์ถœ๋ ฅ๋˜๋„๋ก ํ•ด์ฃผ์—ˆ๋‹ค.

profile
์งˆ๋ฌธ์€ ๊ณ„์†๋ผ ์•„์˜ค์—

0๊ฐœ์˜ ๋Œ“๊ธ€