인프런- 데이터 분석을 위한 고급 SQL: 섹션5 - 윈도우함수로 Consecutive Numbers 문제풀이

르네·2023년 9월 29일
0

SQL

목록 보기
32/63

인프런 강의 <데이터 분석을 위한 고급 SQL>을 듣고, 중요한 점을 정리한 글입니다.

문제

  1. Consecutive Numbers

Table: Logs

+-------------+---------+
| Column Name | Type    |
+-------------+---------+
| id          | int     |
| num         | varchar |
+-------------+---------+

In SQL, id is the primary key for this table.
id is an autoincrement column.

Find all numbers that appear at least three times consecutively.
Return the result table in any order.
The result format is in the following example.

Example 1:

Input: 
Logs table:
+----+-----+
| id | num |
+----+-----+
| 1  | 1   |
| 2  | 1   |
| 3  | 1   |
| 4  | 2   |
| 5  | 1   |
| 6  | 2   |
| 7  | 2   |
+----+-----+
Output: 
+-----------------+
| ConsecutiveNums |
+-----------------+
| 1               |
+-----------------+

Explanation: 1 is the only number that appears consecutively for at least three times.

풀이

  • 나의 틀린 풀이과정
SELECT id
     , num
     , id + 1
     , LEAD(num) OVER ?
FROM Logs
  • 선생님 풀이
SELECT DISTINCT L.num AS ConsecutiveNums
FROM (
SELECT num
     , LEAD(num, 1) OVER (ORDER BY Id) AS next
     , LEAD(num, 2) OVER (ORDER BY Id) AS afternext
FROM logs
) L
WHERE L.num = L.next AND L.num = L.afternext

배운점

  • LEAD로 데이터를 당겨서(두번 LEAD) 세 데이터가 연속인지 확인할 수 있다.
  • 세 데이터열을 가진 테이블을 만들고 그 절을 FROM절에 서브쿼리로 이용해 원하는 결과값을 추출할 수 있다.
profile
데이터분석 공부로그

0개의 댓글