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 | 29 | 30 | 31 |
Tags
- harkerrank
- 회귀분석
- wil
- 내일배움
- Cluster
- 티스토리챌린지
- 파이썬
- 내일배움캠프
- R
- 파이썬 철저 입문
- 파이썬 머신러닝 완벽 가이드
- 오블완
- 실전 데이터 분석 프로젝트
- 내일배움카드
- hackerrank
- 스파르타 코딩
- 텍스트 분석
- 프로그래머스
- 중회귀모형
- 파이썬 완벽 가이드
- 미세먼지
- 프로젝트
- 파이썬 철저입문
- SQL
- 스파르타
- 웹 스크랩핑
- 파이썬 머신러닝 완벽가이드
- TiL
- 스파르타코딩
- MySQL
Archives
- Today
- Total
OkBublewrap
User Shopping Sprees 본문
User Shopping Sprees
문제
1. 쇼핑 쇼프리: 사용자가 연속 3일 이상 구매한 경우
2. 최소한 한 번 이상 쇼핑 스프리를 한 고객의 user_id 오름차순 정렬
풀이
select distinct user_id
from
(
SELECT *,
count(*) over (
PARTITION by user_id
order by transaction_date
range between interval '1days' PRECEDING
and interval '1days' FOLLOWING
) as cnt
FROM transactions
) sub1
where cnt = 3
order by user_id
1️⃣ sub1; window: user_id 파티션, 날짜 오름차순 정렬, 범위 1하루 씩 차이나는 것 count
2️⃣ 3일 연속일 경우 중간 값이 3이 됨
3️⃣ where: cnt = 3인 값 가져오기
4️⃣ 고유한 user_id
5️⃣ user_id 오름차순 정렬
코드 개선
- where cnt = 3 부분은 중복된 날짜에 여러번 구매를 할 수 있기 때문에 where cnt >= 3으로 계산
- 먼저 중복된 날짜를 처리를 한 후에 계산을 진행을 해도 될 부분인 것 같다.
다른 풀이
SELECT DISTINCT T1.user_id
FROM transactions AS T1
INNER JOIN transactions AS T2
ON DATE(T2.transaction_date) = DATE(T1.transaction_date) + 1
INNER JOIN transactions AS T3
ON DATE(T3.transaction_date) = DATE(T1.transaction_date) + 2
ORDER BY T1.user_id;
1️⃣ Self Join으로 해당 날짜 +1, +2 Join
2️⃣ 고유한 user_id
3️⃣ user_id 오름차순 정렬
'개발 > SQL' 카테고리의 다른 글
Compressed Mode (0) | 2025.03.15 |
---|---|
Department vs. Company Salary (0) | 2025.03.15 |
IBM db2 Product Analytics (3) | 2025.03.13 |
FAANG Stock Min-Max (Part 1) (0) | 2025.03.12 |
Second Day Confirmation (0) | 2025.03.12 |