TIL - 250608(leetcode_1개)

오정수·2025년 6월 8일

TIL

목록 보기
74/78

문제1(링크)

# 코드1
WITH a AS (
    SELECT
        *
        , LEAD(people) OVER (ORDER BY id) next_one
        , LEAD(people, 2) OVER (ORDER BY id) next_two
        , LAG(people) OVER (ORDER BY id) prev_one
        , LAG(people, 2) OVER (ORDER BY id) prev_two
    FROM Stadium
)
SELECT
    id
    , visit_date
    , people
FROM a
WHERE people >= 100 AND next_one >= 100 AND next_two >= 100
OR people >= 100 AND prev_one >= 100 AND prev_two >= 100
OR people >= 100 AND next_one >= 100 AND prev_one >= 100

# 코드 2
WITH cte AS (
    SELECT
        *
        , id - ROW_NUMBER() OVER (ORDER BY id) grp
    FROM Stadium
    WHERE people >= 100
)
SELECT
    id
    , visit_date
    , people
FROM cte
WHERE grp IN (
    SELECT
        grp
    FROM cte
    GROUP BY grp
    HAVING COUNT(*) >= 3 
)

비고 : LEAD() 함수와 LAG() 함수를 사용해서 이전 데이터들을 추출한 후 100보다 큰 3회 이상을 추출하는 것을 만들었다. 두번째 코드가 더 좋은 이유는 그루핑을 만든 것이다. HAVING절만 수정하면 조건에 쉽게 변동을 줄 수 있고 id - ROW_NUMBER()는 연속된 구간을 하나의 그룹으로 만들 때 자주 사용되는 거라고 하니 알아두자.

profile
안녕하세요 오정수입니다

0개의 댓글