반응형
12. 기출 예상 코딩 테스트
SQL 실전 대비 — 기출 예상 코딩 테스트 3
1. 특정 서비스 다중 구매 회원 수
SELECT COUNT(DISTINCT A.MEM_NO) AS MEM_NO_CNT
FROM CUSTOMER AS A
LEFT JOIN SALE AS B ON A.MEM_NO = B.MEM_NO
LEFT JOIN SALE_DETAIL AS C ON B.ORDER_NO = C.ORDER_NO
LEFT JOIN SERVICE AS D ON C.SERVICE_CODE = D.SERVICE_CODE
WHERE SERVICE_NAME = 'lounge & bar'
AND QTY >= 2;
- 특정 서비스(lounge & bar)를 2회 이상 구매한 회원 수
- DISTINCT + 조건 필터로 충성 고객군 추출
2. 연도별 가입 회원 수 비교
SELECT '2023가입회원수' AS SEGMENT, COUNT(DISTINCT MEM_NO) AS MEM_NO_CNT
FROM CUSTOMER WHERE YEAR(JOIN_DATE) = 2023
UNION ALL
SELECT '2024가입회원수', COUNT(DISTINCT MEM_NO)
FROM CUSTOMER WHERE YEAR(JOIN_DATE) = 2024
ORDER BY 1;
- UNION ALL을 활용한 세그먼트별 비교형 결과 구성
- 리포트용 데이터 구조 설계에 자주 사용됨
3. 서비스별 가격 요약 및 편차
SELECT SERVICE_NAME,
SUM(PRICE) AS PRICE_SUM,
MAX(PRICE) AS PRICE_MAX,
MIN(PRICE) AS PRICE_MIN,
MAX(PRICE) - MIN(PRICE) AS PRICE_DIFF
FROM SERVICE
GROUP BY SERVICE_NAME
HAVING MAX(PRICE) - MIN(PRICE) <> 0
ORDER BY SERVICE_NAME ASC;
- 가격 합계·최대·최소·편차까지 한번에 계산
- HAVING으로 동일가 서비스 제거
4. 회원별 구매횟수 구간 분류
WITH BASE AS (
SELECT A.MEM_NO, COUNT(DISTINCT B.ORDER_NO) AS ORDER_CNT
FROM CUSTOMER AS A
LEFT JOIN SALE AS B ON A.MEM_NO = B.MEM_NO
GROUP BY A.MEM_NO
)
SELECT CASE WHEN ORDER_CNT = 0 THEN '0회'
WHEN ORDER_CNT = 1 THEN '1회'
WHEN ORDER_CNT >= 2 THEN '2회이상' END AS SEGMENT,
COUNT(DISTINCT MEM_NO) AS MEM_NO_CNT
FROM BASE
GROUP BY 1
ORDER BY SEGMENT ASC;
- CASE문으로 구매 구간을 3단계로 분류
- 신규/활성/충성 고객층 세분화 기반
* 이 글은 제로베이스 데이터사이언스 파트타임 스쿨의 강의 자료 일부를 발췌하여 작성되었습니다.
💡 생각 정리
이번 문제는 데이터 요약 로직을 설계하는 기본기를 점검하기에 적합했다.
특히, 단순 조회보다 “비즈니스 인사이트를 위한 구간화(SEGMENT)” 접근이 중요했다.
예를 들어, 0회, 1회, 2회이상 구간으로 나누면 리텐션 및 구매 촉진 전략을 세우는 데 즉각적인 인사이트를 얻을 수 있다.
또한 HAVING MAX-MIN <> 0 같은 조건은 단순 집계를 정제하는 고급 필터링 방식으로, 데이터 분석 결과의 “품질 관리” 개념을 익힐 수 있었다.
🚀 적용점
- 신규/재구매 회원 구간을 자동 집계하는 리텐션 모니터링 SQL로 확장
- CASE WHEN 구조를 표준화해 BI 대시보드용 고객 세그먼트 생성
- HAVING 활용으로 이상치 제거 및 상품 단가 편차 감시 로직 구축
SQL 실전 대비 — 기출 예상 코딩 테스트 4
1. 모든 주요 페이지(login·home·product)에 방문한 사용자 수
WITH BASE AS (
SELECT USER_ID, GROUP_CONCAT(DISTINCT PAGE ORDER BY PAGE ASC) AS PAGE_GROUP_CONCAT
FROM VISIT
GROUP BY USER_ID
)
SELECT COUNT(DISTINCT USER_ID) AS USER_CNT
FROM BASE
WHERE PAGE_GROUP_CONCAT = 'home,login,product';
- 3개 페이지 모두 방문한 USER_ID 추출
- GROUP_CONCAT으로 행동 패턴을 문자열로 묶어 필터링
2. 디바이스별 세션 수 요약
SELECT DEVICE_TYPE,
COUNT(DISTINCT CASE WHEN PAGE='login' THEN SESSION_ID END) AS LOG_SESSION,
COUNT(DISTINCT CASE WHEN PAGE='home' THEN SESSION_ID END) AS HOME_SESSION,
COUNT(DISTINCT CASE WHEN PAGE='product' THEN SESSION_ID END) AS PRODUCT_SESSION
FROM VISIT
GROUP BY DEVICE_TYPE
ORDER BY DEVICE_TYPE ASC;
- 디바이스별 페이지 세션 분포 비교
- 멀티채널 유입 분석(MA) 기반의 데이터 구조
3. 2일 이상 로그인한 사용자 수
WITH BASE AS (
SELECT USER_ID, COUNT(DISTINCT DATE(LOG_DATE)) AS LOG_DATE_DAY
FROM VISIT
WHERE PAGE='login'
GROUP BY USER_ID
HAVING COUNT(DISTINCT DATE(LOG_DATE)) > 1
)
SELECT COUNT(DISTINCT USER_ID) AS USER_CNT FROM BASE;
- “지속 방문자(리텐션 유저)” 계산 로직
- 단순 로그인 수가 아닌 날짜 단위 로그인일수 기준
4. 로그인만 하고 다른 페이지를 방문하지 않은 사용자
WITH LOGIN AS (
SELECT * FROM VISIT WHERE PAGE='login'
),
OTHER AS (
SELECT * FROM VISIT WHERE PAGE<>'login'
)
SELECT COUNT(DISTINCT LOGIN.USER_ID) AS USER_CNT,
COUNT(DISTINCT LOGIN.SESSION_ID) AS SESSION_CNT
FROM LOGIN
LEFT JOIN OTHER ON LOGIN.USER_ID = OTHER.USER_ID
WHERE OTHER.USER_ID IS NULL;
- 이탈 가능성이 높은 “단일 접속 사용자” 식별
- 로그인 후 이탈(탈락) 패턴 탐지용
* 이 글은 제로베이스 데이터사이언스 파트타임 스쿨의 강의 자료 일부를 발췌하여 작성되었습니다.
💡 생각 정리
이 문제는 전형적인 웹/앱 로그 분석 SQL로, 사용자의 행동 흐름을 데이터로 정리하는 사고력을 요구했다.
GROUP_CONCAT을 활용한 “행동 조합 패턴화”는 단순 방문 기록을 **세션 단위의 유저 여정(User Journey)**으로 바꾸는 강력한 도구였다.
또한 CASE WHEN으로 페이지별 세션 카운트를 나누는 방법은 실제 GA4, Amplitude, Snowflake 환경에서도 널리 쓰이는 방식이기에 실무 응용도가 높았다.
🚀 적용점
- 마케팅 퍼널(Funnel) 분석에 그대로 적용 가능
- login → home → product 순서별 이탈률 계산
- 리텐션 측정
- “2일 이상 로그인한 사용자” 지표를 DAU/MAU 계산의 기반으로 사용
- 유저 세그먼트 구축
- 로그인만 한 유저 vs 다중 페이지 방문 유저로 구분하여 리타겟팅
👉 이번 세트는 SQL을 통해 “로그 데이터로 사용자의 행동을 해석하는 방법”을 배우는 단계로,
실제 데이터 분석가·마케팅 직무 코딩테스트와 가장 유사한 구성이다.
반응형
'데이터' 카테고리의 다른 글
| 제로베이스 데이터사이언스 스쿨 - Part 03. 기초 수학-01 (0) | 2025.10.20 |
|---|---|
| 제로베이스 데이터사이언스 스쿨 - Part.02 데이터 분석을 위한 SQL-18 (0) | 2025.10.18 |
| 제로베이스 데이터사이언스 스쿨 - Part.02 데이터 분석을 위한 SQL-16 (0) | 2025.10.16 |
| 제로베이스 데이터사이언스 스쿨 - Part.02 데이터 분석을 위한 SQL-15 (0) | 2025.10.15 |
| 제로베이스 데이터사이언스 스쿨 - Part.02 데이터 분석을 위한 SQL-14 (0) | 2025.10.14 |