Tools/- SQL

[SQL] leetcode | 601. Human Traffic of Stadium ์˜ˆ์ œ ํ’€์ด | ์–ด๋–ค ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋Š” ํ–‰์ด ์—ฐ์†์ ์œผ๋กœ n๊ฐœ

์Šค์œ„๋ฏผ 2025. 1. 19. 16:40

๋ฌธ์ œ

https://leetcode.com/problems/human-traffic-of-stadium/description/

 

 

WITH result AS (
    SELECT 
        id, 
        visit_date, 
        people,
        LAG(people) OVER (ORDER BY id) AS prev_people
    FROM stadium
),
session_marker AS (
    SELECT
        id,
        visit_date,
        people,
        (CASE
            WHEN prev_people IS NULL THEN 1
            WHEN prev_people < 100 THEN 1
            WHEN people < 100 THEN 1
            ELSE 0
        END) AS marking
    FROM result
),
session_grouping AS (
    SELECT
        id,
        visit_date,
        people,
        SUM(marking) OVER (ORDER BY id) AS session_group
    FROM session_marker
)
SELECT 
    id, 
    visit_date, 
    people
FROM session_grouping
WHERE session_group IN (
    SELECT session_group
    FROM session_grouping
    GROUP BY session_group
    HAVING COUNT(DISTINCT id) >= 3
)
ORDER BY session_group, id;

-- 40๋ถ„ .. ใ…Ž

^ ์žฅ์žฅ 40๋ถ„์— ๊ฑธ์ณ ์™„์„ฑํ•œ ๋‚ด ๊ตฌ๊ตฌ์ ˆ์ ˆ ์ฝ”๋“œ .. ใ…Ž

 

WITH session_group AS (
    SELECT 
        *,
        ROW_NUMBER() OVER (ORDER BY id) AS rownum,
        id - ROW_NUMBER() OVER (ORDER BY id) AS grp
    FROM Stadium
    WHERE people >= 100
)
SELECT 
    sg.id,
    sg.visit_date,
    sg.people
FROM session_group sg
WHERE sg.grp IN (
    SELECT grp
    FROM session_group
    GROUP BY grp
    HAVING COUNT(*) >= 3)

^ ํƒ€ ๋ธ”๋กœ๊ทธ์—์„œ ํผ์˜จ ์ฒœ์žฌ์ ์ธ ์ฝ”๋“œ ..!

 

์ด ์ •๋„๋ฉด ์ˆ˜ํ•™/๋…ผ๋ฆฌ์  ์‚ฌ๊ณ ์˜ ์‹ธ์›€์ธ ๋“ฏ ..

 

๋ฌธ์ œ ํ’€์ด

session_group CTE : 

session_group CTE๋ฅผ ํ™•์ธํ•ด๋ณด๋ฉด
1์ฐจ๋กœ people >= 100 ์œผ๋กœ ๊ฑธ๋Ÿฌ๋‚ธ ํ…Œ์ด๋ธ”์—์„œ

id - row number๋ฅผ ๊ตฌํ•˜๋ฉด

100์ด ๋„˜๋Š” ์—ฐ์†์ ์ธ ํ–‰์€ ๊ฐ™์€ grp ์ˆซ์ž๋ฅผ ๊ฐ€์ง€๊ฒŒ ๋œ๋‹ค.

 

๊ทธ ๋‹ค์Œ์— grp์˜ ํ–‰ ๊ฐฏ์ˆ˜๊ฐ€ 3๊ฐœ ์ด์ƒ์ธ ๊ฑธ ์ถœ๋ ฅํ•˜๋ฉด ๋˜๊ฒ ๋‹ค

 

ํ•ด๋‹น ํ’€์ด ๋ฐฉ๋ฒ•์€ ์ˆœ์ฐจ์ ์ธ id๊ฐ€ ์กด์žฌํ•˜๋Š” ํ…Œ์ด๋ธ”์— ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๊ฒ ๋‹ค

 

๋А๋‚€ ์ 

์ง€๋‚œ๋ฒˆ ์„ธ์„  ์žฌ์ •์˜ํ•˜๊ธฐ ๋ฌธ์ œ์™€ ๋น„์Šทํ•ด๋ณด์—ฌ์„œ ๊ฐ™์€ ์›๋ฆฌ๋กœ ์ฝ”๋“œ๋ฅผ ์งฐ๊ณ  ์„ฑ๊ณตํ•˜๊ธด ํ–ˆ์ง€๋งŒ ์‹œ๊ฐ„์ด ๋„ˆ๋ฌด ์˜ค๋ž˜ ๊ฑธ๋ ธ๋‹ค.

๊ฒฐ๊ตญ ์ด ๋ฌธ์ œ๋ฅผ ํ’€ ์ˆ˜ ์žˆ๋Š” ์ฃผ์š” ์›๋ฆฌ๋Š” ๋‹ฌ๋ž๋‹ค.

 

ํ•ด๋‹น ํ’€์ด ๋ฐฉ๋ฒ•์„ ์ด๋ฒˆ์— ๊ธฐ์–ตํ•ด์„œ ๋‹ค๋ฅธ ๋ฌธ์ œ์— ์จ๋จน์„ ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์•ผ๊ฒ ๋‹ค !

๊ทธ๋ฆฌ๊ณ  ๋‹ค์–‘ํ•œ ๋ฌธ์ œ๋ฅผ ํ’€์–ด๋ณด๋Š” ๊ฒŒ ์ค‘์š”ํ•˜๋‹ค๋Š” ๊ฑธ ์‹ค๊ฐํ–ˆ๋‹ค