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)