SQL

Card Launch Success: JPMorgan SQL Interview Question

sawo11 2025. 5. 3. 15:33

문제 풀이 링크: https://datalemur.com/questions/card-launch-success

 

JPMorgan Chase SQL Interview Question | DataLemur

JPMorgan Chase SQL Interview Question: Write a query to find how many cards were launched in its launch month.

datalemur.com


💳 JPMorgan 신용카드 첫 달 발급량 조회 문제 요약

  • 목적: 신용카드별 출시 첫 달에 발급된 카드 수량 조회
  • 조건:
    • 출시 첫 달(launch month)은 해당 카드가 monthly_cards_issued 테이블에 처음 등장한 연·월
    • 각 카드의 출시 첫 달의 발급량만 집계 대상
    • 결과는 발급량 기준 내림차순으로 정렬

1. 내 풀이

  • RANK() OVER 함수를 사용하여 카드별발행 연월 기준 오름차순 정렬 후 순위 부여
    • 카드 이름별로 출시 순서(rank)를 나누기 위해 PARTITION BY card_name 사용
    • 발행 연월 기준으로 rank를 정렬하기 위해 ORDER BY issue_year, issue_month 사용
  • rn = 1인 경우만 필터링하여 → 출시 첫 달의 발급량만 추출
  • 결과는 issued_amount 기준 내림차순 정렬
WITH issued_rank AS (
  SELECT card_name,
    issued_amount, 
    RANK() OVER(PARTITION BY card_name ORDER BY issue_year, issue_month) rn
  FROM monthly_cards_issued
  )
  
SELECT card_name,
  issued_amount
FROM issued_rank
WHERE rn = 1
ORDER BY issued_amount DESC;

2. 정답 풀이

  • MAKE_DATE(issue_year, issue_month, 1)를 사용해 연월 데이터를 날짜 형식(issue_date)으로 변환
    • MAKE_DATE(year, month, day): 연도, 월, 일을 합쳐서 날짜 형식(DATE)으로 만드는 함수
  • 카드 이름별(card_name)로 가장 빠른 발급일(launch_date)을 MIN(...) OVER(PARTITION BY card_name) 으로 구함
    • MIN(...) OVER (PARTITION BY ...): 그룹별로 최소값(최솟값)을 구하는 윈도우 함수
  • 각 행의 issue_date가 launch_date와 일치하는 경우만 필터링 → 출시 첫 달의 발급량만 추출
  • 결과는 issued_amount 기준 내림차순 정렬
WITH card_launch AS (
  SELECT 
    card_name,
    issued_amount,
    MAKE_DATE(issue_year, issue_month, 1) AS issue_date,
    MIN(MAKE_DATE(issue_year, issue_month, 1)) OVER (
      PARTITION BY card_name) AS launch_date
  FROM monthly_cards_issued
)

SELECT 
  card_name, 
  issued_amount
FROM card_launch
WHERE issue_date = launch_date
ORDER BY issued_amount DESC;