데이터 분석가가 이직할 때 피할 수 없는 관문 중 하나가 바로 SQL 코딩 테스트입니다. 경력직 중급 데이터 분석가들이 자주 접하는 고급 SQL 중급 테스트 문제 3가지와 접근법을 알려드릴게요.
문제 1: 사용자의 연속 방문일 수 분석
문제: 사용자의 방문 이력이 담긴 테이블(visit_history)이 있습니다. 각 사용자의 최장 연속 방문일 수를 계산하여 사용자 ID와 함께 조회하세요.
테이블 예시 데이터:
user_id | visit_date |
---|---|
101 | 2024-01-01 |
101 | 2024-01-02 |
101 | 2024-01-04 |
102 | 2024-01-10 |
102 | 2024-01-11 |
102 | 2024-01-12 |
103 | 2024-02-01 |
103 | 2024-02-03 |
103 | 2024-02-04 |
접근 방법:
- 각 방문일 사이의 날짜 간격을 확인하여 연속성을 판단
- 윈도우 함수 및 날짜 계산을 활용하여 연속 방문 그룹을 정의
- 그룹별로 방문 횟수를 계산하여 최대값을 추출
SQL 정답:
WITH consecutive_days AS (
SELECT
user_id,
visit_date,
DATE_SUB(visit_date, INTERVAL ROW_NUMBER() OVER (PARTITION BY user_id ORDER BY visit_date) DAY) AS grp
FROM visit_history
)
SELECT
user_id,
MAX(cnt) AS max_consecutive_days
FROM (
SELECT
user_id,
grp,
COUNT(*) AS cnt
FROM consecutive_days
GROUP BY user_id, grp
) grouped_data
GROUP BY user_id;
문제 2: 고객별 최초 구매 이후 N번째 구매까지의 평균 소요 일수 분석
문제: 고객의 구매 이력이 담긴 테이블(purchase_history)이 있습니다. 각 고객별로 최초 구매부터 3번째 구매까지 걸린 평균 소요 일수를 계산하여 고객 ID와 함께 조회하세요.
테이블 예시 데이터:
customer_id | purchase_date |
C001 | 2024-01-01 |
C001 | 2024-01-10 |
C001 | 2024-01-20 |
C002 | 2024-02-05 |
C002 | 2024-02-15 |
C003 | 2024-03-01 |
접근 방법:
- 각 고객의 구매 이력을 시간순으로 정렬
- 구매 횟수별로 순위를 매기고 최초 구매부터 특정 순번 구매까지의 날짜 차이 계산
- 날짜 차이를 평균하여 결과 도출
SQL 정답:
WITH ranked_purchases AS (
SELECT
customer_id,
purchase_date,
ROW_NUMBER() OVER (PARTITION BY customer_id ORDER BY purchase_date) AS purchase_seq
FROM purchase_history
)
SELECT
customer_id,
AVG(DATEDIFF(purchase_date, FIRST_VALUE(purchase_date) OVER (PARTITION BY customer_id ORDER BY purchase_date))) AS avg_days
FROM ranked_purchases
WHERE purchase_seq <= 3
GROUP BY customer_id;
문제 3: 기간별 누적 신규 사용자 수 분석
문제: 사용자 가입 이력이 담긴 테이블(user_registration)이 있습니다. 일자별로 신규 가입자 수와 누적 가입자 수를 계산하여 일자와 함께 조회하세요.
테이블 예시 데이터:
user_id | registration_date |
U001 | 2024-01-01 |
U002 | 2024-01-01 |
U003 | 2024-01-02 |
U004 | 2024-01-03 |
U005 | 2024-01-03 |
접근 방법:
- 일자별 신규 가입자 수 집계
- 윈도우 함수를 이용하여 누적 가입자 수 계산
SQL 정답:
SELECT
registration_date,
COUNT(user_id) AS daily_new_users,
SUM(COUNT(user_id)) OVER (ORDER BY registration_date) AS cumulative_users
FROM user_registration
GROUP BY registration_date
ORDER BY registration_date;
추가 팁: 중급 데이터 분석가가 꼭 갖춰야 할 필수 지식
- 고급 SQL 기법:
- 윈도우 함수 심화 활용법
- 복잡한 CTE와 서브쿼리 작성 능력
- 효율적인 쿼리 최적화 능력:
- 실행 계획 분석 및 인덱스 전략 이해
- 데이터 모델링과 설계 이해:
- ERD 작성 및 관계형 데이터베이스 설계 이해
- 데이터 시각화 및 BI 도구 활용:
- Tableau, Looker, PowerBI 등 BI 도구 숙련도
- 비즈니스 도메인 이해력:
- 실제 비즈니스 이슈를 분석하고 인사이트 도출 능력
이러한 역량은 중급 이상 데이터 분석 업무 수행과 이직에 필수적입니다.
자주 사용하지 않는 함수들도 평소에 눈여겨 봐두시고, 응용해보는 것도 좋은 방법 일 것입니다.
답글 남기기