OkBublewrap

User Shopping Sprees 본문

개발/SQL

User Shopping Sprees

옥뽁뽁 2025. 3. 13. 12:06

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