SQL/SQL문풀

[MY SQL] 3회 연속인 숫자 구하기

data_2080 2025. 1. 17. 22:13
728x90

출처: [leetcode - SQL50] :  180. Consecutive Numbers

1. 윈도우 함수 LEAD OVER 활용하기

1) NUM을 기준으로 LEAD OVER을 사용하여, 1개 전과 2개 전의 값을 NUM2,NUM3로 지정

2) SELECT문에서 NUM과 NUM1이 같으면서 NUM2의 값도 같은 값을 구하기(distinct로 3회 연속인 숫자가 여러번 발생해도 1개만 조회)

WITH lead_num AS (
    SELECT 
        NUM,
        LEAD(NUM, 1) OVER() AS NUM1,
        LEAD(NUM, 2) OVER() AS NUM2
    FROM LOGS
)

SELECT DISTINCT 
    NUM AS ConsecutiveNums
FROM lead_num
WHERE (NUM = NUM1) AND (NUM = NUM2);

2. SELFT JOIN 활용하기

1) 테이블을 2번 JOIN하는 방식으로 ID +1을 했을 때의 NUM의 값이 ID의 NUM값과 같으면서,

ID+2를 했을 때 NUM의 값이 ID의 NUM값과 같을 때 조회하는 방법

=> ID(시작), ID+1(2번째), ID+2(3번째) 모두 같은 NUM을 가져야만 출력

SELECT DISTINCT 
    A.NUM AS ConsecutiveNums
FROM LOGS AS A
JOIN LOGS AS B
    ON A.NUM = B.NUM AND A.ID + 1 = B.ID
JOIN LOGS AS C
    ON A.NUM = C.NUM AND B.ID + 1 = C.ID;

 

728x90