250x250
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- SQL
- 프로그래머스
- 오블완
- 약수구하기
- 파이썬문풀
- 티스토리챌린지
- 데이터리안실전반
- sql문풀
- leetcode문풀
- 위키독스
- 셀프조인
- SQL고득점KIT
- 프로그래머스문풀
- 파이썬
- 윈도우함수
- 데벨챌
- 그로스해킹
- SQL테스트
- mysql
- 코테준비
- 데이터리안넥스트레벨챌린지
- 활성사용자수
- with절
- levle1
- leetcode
- 서브쿼리
- sql50
- 데이터리안
- join
- 문풀
Archives
- Today
- Total
꿈은 데이터분석가, 취미는 계획
[MY SQL] 3회 연속인 숫자 구하기 본문
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
'SQL > SQL문풀' 카테고리의 다른 글
[MY SQL] id의 순서 변경하기 (0) | 2025.02.04 |
---|---|
[MY SQL] 카테고리별 집계하기 (0) | 2025.02.03 |
[MY SQL] 모든 제품을 구매한 고객 조회하기 (0) | 2025.01.16 |
[MY SQL] 연달아 로그인한 사람의 비율 구하기 (0) | 2025.01.15 |
[MY SQL] 여러 행(레코드)의 값을 하나의 문자열로 결합 (1) | 2024.12.18 |