Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
Tags
- TiL
- 오블완
- 파이썬 머신러닝 완벽 가이드
- 텍스트 분석
- 중회귀모형
- 스파르타
- 파이썬 철저입문
- 내일배움
- Cluster
- 스파르타 코딩
- R
- 내일배움카드
- 실전 데이터 분석 프로젝트
- 티스토리챌린지
- 웹 스크랩핑
- 미세먼지
- 회귀분석
- 프로그래머스
- 프로젝트
- 파이썬
- 스파르타코딩
- 어쩌다 마케팅
- 파이썬 철저 입문
- hackerrank
- MySQL
- 파이썬 머신러닝 완벽가이드
- wil
- 내일배움캠프
- harkerrank
- SQL
Archives
- Today
- Total
OkBublewrap
상품을 구매한 회원 비율 구하기 본문
문제
- USER_INFO 테이블과 ONLINE_SALE 테이블에서 2021년에 가입한 전체 회원들 중 상품을 구매한 회원수와 상품을 구매한 회원의 비율(=2021년에 가입한 회원 중 상품을 구매한 회원수 / 2021년에 가입한 전체 회원 수)을 년, 월 별로 출력하는 SQL문을 작성해주세요.
- 상품을 구매한 회원의 비율은 소수점 두번째자리에서 반올림하고, 전체 결과는 년을 기준으로 오름차순 정렬해주시고 년이 같다면 월을 기준으로 오름차순 정렬해주세요.
데이터
입력 테이블
Customers
Column Name | Type | Nullable |
---|---|---|
USER_ID | INTEGER | FALSE |
GENDER | TINYINT(1) | TRUE |
AGE | INTEGER | TRUE |
JOINED | DATE | FALSE |
Orders
Column Name | Type | Nullable |
---|---|---|
ONLINE_SALE_ID | INTEGER | FALSE |
USER_ID | INTEGER | FALSE |
PRODUCT_ID | INTEGER | FALSE |
SALES_AMOUNT | INTEGER | FALSE |
SALES_DATE | DATE | FALSE |
풀이과정
1. 2021년에 가입한 회원, LEFT JOIN
SELECT UI.JOINED, OS.SALES_DATE, UI.USER_ID AS JOIN_ID, OS.USER_ID AS SALE_ID
FROM USER_INFO UI
LEFT JOIN ONLINE_SALE OS ON UI.USER_ID = OS.USER_ID
WHERE YEAR(UI.JOINED) = '2021'
2. 연도별, 월별로 구입한 고유한 회원수 구하기
SELECT YEAR(OS.SALES_DATE) AS YEAR, MONTH(OS.SALES_DATE) AS YEAR, COUNT(DISTINCT OS.USER_ID) AS PURCHASED_USERS
FROM USER_INFO UI
LEFT JOIN ONLINE_SALE OS ON UI.USER_ID = OS.USER_ID
WHERE YEAR(UI.JOINED) = '2021'
GROUP BY 1, 2
HAVING YEAR IS NOT NULL; # NULL 값도 같이 그룹화 됨
3. 2021년에 가입한 전체 회원수 구하기
SELECT COUNT(DISTINCT UI.USER_ID) AS TOTAL_USER
FROM USER_INFO UI
WHERE YEAR(UI.JOINED) = '2021'
4. 비율 구하기
SELECT YEAR(OS.SALES_DATE) AS YEAR, MONTH(OS.SALES_DATE) AS MONTH, COUNT(DISTINCT OS.USER_ID) AS PURCHASED_USERS,
ROUND(COUNT(DISTINCT OS.USER_ID) / (SELECT COUNT(DISTINCT UI.USER_ID)
FROM USER_INFO UI
WHERE YEAR(UI.JOINED) = '2021'), 1) AS PURCHASE_RATE
FROM USER_INFO UI
LEFT JOIN ONLINE_SALE OS ON UI.USER_ID = OS.USER_ID
WHERE YEAR(UI.JOINED) = '2021'
GROUP BY 1, 2
HAVING YEAR IS NOT NULL
ORDER BY 1, 2
'개발 > SQL' 카테고리의 다른 글
Average Selling Price (0) | 2025.01.10 |
---|---|
특정 기간동안 대여 가능한 자동차들의 대여 비용 구하기 (0) | 2025.01.10 |
입양 시각 구하기 (0) | 2025.01.10 |
Weather Observation Station 20 / LAT_N 중앙값 구하기 (0) | 2025.01.10 |
자동차 대여 기록 별 대여 금액 구하기 (0) | 2025.01.10 |