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;