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
복사