문제 풀이 링크: https://datalemur.com/questions/histogram-users-purchases
Walmart SQL Interview Question | DataLemur
Walmart SQL Interview Question: Write a query to retrieve the the users along with the number of products they bought.
datalemur.com
🧢 Walmart 사용자 거래 내역 문제 요약
- 목적: 사용자별 가장 최근 거래일 기준으로 거래일, user_id, 구매한 상품 개수를 조회하기
- 조건: 가장 최근 거래일만 대상으로 집계, 결과는 거래일 기준 오름차순으로 정렬
1. 내 풀이
- 먼저 날짜별(user_id, transaction_date)로 그룹화하여 거래 수를 집계
- 그 다음 RANK()를 부여해 사용자별 가장 최근 거래일을 선정
- rn = 1인 (가장 최신 거래) 데이터만 선택
- 최종 결과를 거래일 오름차순으로 정렬
WITH user_rn AS (
SELECT transaction_date,
user_id,
COUNT(user_id) purchase_count,
RANK() OVER(
PARTITION BY user_id
ORDER BY transaction_date DESC) rn
FROM user_transactions
GROUP BY 1, 2
)
SELECT transaction_date,
user_id,
purchase_count
FROM user_rn
WHERE rn = 1
ORDER BY 1;
2. 정답 풀이
- RANK()를 먼저 부여해 사용자별 가장 최근 거래를 식별
- 그 후 transaction_rank = 1 조건으로 최신 거래만 필터링
- 필터링된 거래들에서 상품 개수(COUNT(product_id)) 집계
- 거래일(transaction_date)과 사용자(user_id) 단위로 그룹화
- 최종 결과를 거래일 오름차순으로 정렬
WITH latest_transactions_cte AS (
SELECT
transaction_date,
user_id,
product_id,
RANK() OVER (
PARTITION BY user_id
ORDER BY transaction_date DESC) AS transaction_rank
FROM user_transactions)
SELECT
transaction_date,
user_id,
COUNT(product_id) AS purchase_count
FROM latest_transactions_cte
WHERE transaction_rank = 1
GROUP BY transaction_date, user_id
ORDER BY transaction_date;
3. 비교
내 풀이 | 정답 풀이 | |
집계 순서 | GROUP BY로 집계, 그 다음 RANK() | RANK() 후 필터링, 그 다음 집계 |
안정성 | 단순한 데이터에 적합 | 복잡한 거래 데이터에도 강함 |
추천 상황 | 거래 수가 적고 단순한 경우 | 거래가 많거나 시간 단위 관리가 필요한 경우 |
'SQL' 카테고리의 다른 글
Department vs. Company Salary: FAANG SQL Interview Question (0) | 2025.04.30 |
---|---|
3-Topping Pizzas: McKinsey SQL Interview Question (0) | 2025.04.28 |
User Shopping Sprees: Amazon SQL Interview Question (0) | 2025.04.28 |
Advertiser Status: Facebook SQL Interview Question (0) | 2025.04.26 |
Maximize Prime Item Inventory: Amazon SQL Interview Question (0) | 2025.04.25 |