문제
MYSQL
내가 작성한 정답
SELECT DATE_FORMAT(SALES_DATE,'%Y') YEAR,
DATE_FORMAT(SALES_DATE,'%m') MONTH,
COUNT(DISTINCT U.USER_ID) PURCHASED_USERS,
ROUND(COUNT(DISTINCT U.USER_ID)/(SELECT COUNT(*) FROM USER_INFO WHERE JOINED LIKE '2021%'),1) PUCHASED_RATIO
FROM USER_INFO U
JOIN ONLINE_SALE O ON U.USER_ID = O.USER_ID
WHERE JOINED LIKE '2021%'
GROUP BY DATE_FORMAT(SALES_DATE,'%Y'), DATE_FORMAT(SALES_DATE,'%m')
ORACLE
내가 작성한 오답
SELECT TO_CHAR(O.SALES_DATE,'YYYY') YEAR,
TO_CHAR(O.SALES_DATE,'MM') MONTH,
COUNT(DISTINCT O.USER_ID) PURCHASED_USERS,
ROUND(COUNT(DISTINCT O.USER_ID)/(SELECT COUNT(*) FROM USER_INFO WHERE TO_CHAR(JOINED,'YYYY')='2021'),1) PUCHASED_RATIO
FROM USER_INFO U
JOIN ONLINE_SALE O ON U.USER_ID = O.USER_ID
WHERE TO_CHAR(U.JOINED,'YYYY') = '2021'
GROUP BY TO_CHAR(O.SALES_DATE,'MM'),TO_CHAR(O.SALES_DATE,'YYYY')
ORDER BY YEAR ASC, MONTH ASC

오답의 원인을 찾지 못하던 중 문제를 다시 읽으니 월에 1월이면 01이 아닌 1이 출력되어야했다.

그래서 EXTRACT함수를 사용하여 월만 출력하였더니 정답처리 되었다.
내가 작성한 정답
SELECT TO_CHAR(O.SALES_DATE,'YYYY') YEAR,
EXTRACT(MONTH FROM O.SALES_DATE) MONTH,
COUNT(DISTINCT O.USER_ID) PURCHASED_USERS,
ROUND(COUNT(DISTINCT O.USER_ID)/(SELECT COUNT(*) FROM USER_INFO WHERE TO_CHAR(JOINED,'YYYY')='2021'),1) PUCHASED_RATIO
FROM USER_INFO U
JOIN ONLINE_SALE O ON U.USER_ID = O.USER_ID
WHERE TO_CHAR(U.JOINED,'YYYY') = '2021'
GROUP BY EXTRACT(MONTH FROM O.SALES_DATE),TO_CHAR(O.SALES_DATE,'YYYY')
ORDER BY YEAR ASC, MONTH ASC
EXTRACT(field FROM source)
field: 추출하려는 날짜/시간의 구성 요소로 YEAR, MONTH, DAY, HOUR, MINUTE, SECOND 등을 사용
source: 날짜 또는 시간 데이터 타입의 값
Share article