USER_INFO 테이블과 ONLINE_SALE 테이블에서 년, 월, 성별 별로 상품을 구매한 회원수를 집계하는 SQL문을 작성해주세요. 결과는 년, 월, 성별을 기준으로 오름차순 정렬해주세요. 이때, 성별 정보가 없는 경우 결과에서 제외해주세요.
문제링크
조건정리
풀이
SELECT DATE_FORMAT(sales_date,'%Y') AS YEAR,
DATE_FORMAT(sales_date, '%m') AS MONTH,
u.GENDER,
COUNT(DISTINCT o.user_id) AS USERS
FROM user_info u
INNER JOIN online_sale o
ON u.user_id = o.user_id
WHERE gender IS NOT NULL
GROUP BY 1,2,3
ORDER BY 1,2,3
다른사람 풀이
SELECT
YEAR(S.SALES_DATE) AS YEAR,
MONTH(S.SALES_DATE) AS MONTH,
U.GENDER,
COUNT(DISTINCT S.USER_ID) AS USERS
FROM ONLINE_SALE S JOIN USER_INFO U ON S.USER_ID = U.USER_ID
WHERE U.GENDER IS NOT NULL
GROUP BY 1,2,3
ORDER BY 1,2,3
다른 건 다 똑같은데 YEAR
, MONTH
함수 사용에서 차이가 난다
DATE_FORMAT
은 01
YEAR
은 1
문제 원래 의도라면 DATE_FORMAT
보다는 정수형으로 반환되는 게 더 적합한 방식인듯