Kimuksung
Kimuksung 안녕하세요. 분산처리에 관심이 많은 생각하는 주니어 Data Enginner입니다.

leet code sql 180

** 180.Consecutive Numbers**

문제


  • 연속적으로 최소 3번 이상 나온 숫자들을 출력
  • 같은 점수가 여러번 나와도 한번만 출력

문제 접근


  • 연속적인 수를 어떻게 표현할 수 있는가?
    • row_number(order by) 과 row_number( partition by target order by ) 를 이용하여 연속된 수는 동일하게 나타낼 수 있다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
with consecutive_data as (
    select
        num,
        row_number() over(order by id) - row_number() over (partition by num order by id) as ordering_score
    from Logs
),
max_data as (
    select
        num,
        ordering_score,
        count(ordering_score) cnt
    from consecutive_data
    group by 1, 2
    having count(ordering_score) >= 3
)
select
    distinct num ConsecutiveNums
from max_data;
  • 천재들의 풀이…
  • 연속적인 3개만 체크하면 되니, lead 함수를 이용하여 구현..
1
2
3
4
5
6
7
8
9
10
with cte as (
	select 
		num,
		lead(num,1) over() num1,
		lead(num,2) over() num2
)
select 
	distinct num
from cte
where (num=num1) and (num2=num1)