Home

년, 월, 성별 별 상품 구매 회원 수 구하기

Link

Tables

erDiagram
	USER_INFO {
		USER_ID INTEGER PK
		GENDER TINYINT
		AGE INTEGER
		JOINED DATE
	}
	ONLINE_SALE {
		ONLINE_SALE_ID INTEGER PK
		USER_ID INTEGER FK
		PRODUCT_ID INTEGER
		SALES_AMOUNT INTEGER
		SALES_DATE DATE
	}
	USER_INFO o|--o{ ONLINE_SALE : Sales_History
Mermaid
복사

Question

USER_INFO 테이블과 ONLINE_SALE 테이블에서 년, 월, 성별 별로 상품을 구매한 회원수를 집계하는 SQL문을 작성해주세요. 결과는 년, 월, 성별을 기준으로 오름차순 정렬해주세요. 이때, 성별 정보가 없는 경우 결과에서 제외해주세요.

DataFlow

성병이 null 인 경우가 있다. -> null 값을 숫자로 바꾸면 0인가? -> 성별 null filter
년, 월, 성병 -> 구매 / 회원 / count
상품을 구매한 회원수 -> DISTINCT

Answer

WITH g_filter AS ( SELECT * FROM USER_INFO WHERE GENDER IS NOT NULL ), agg_sales AS ( SELECT YEAR(s.SALES_DATE) AS YEAR, MONTH(s.SALES_DATE) AS MONTH, s.GENDER AS GENDER, COUNT(DISTINCT s.USER_ID) AS USERS FROM ( SELECT o.*, u.GENDER FROM ONLINE_SALE o JOIN g_filter u ON o.USER_ID = u.USER_ID ) s GROUP BY YEAR(s.SALES_DATE), MONTH(s.SALES_DATE), s.GENDER ) SELECT * FROM agg_sales ORDER BY YEAR, MONTH, GENDER
SQL
복사