SQL

Histogram of Users and Purchases: Walmart SQL Interview Question

sawo11 2025. 4. 28. 03:48

문제 풀이 링크: 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() 후 필터링, 그 다음 집계
안정성 단순한 데이터에 적합 복잡한 거래 데이터에도 강함
추천 상황 거래 수가 적고 단순한 경우 거래가 많거나 시간 단위 관리가 필요한 경우