CREATE 문
CREATE TABLE USER_INFO (
USER_ID NUMBER NOT NULL,
GENDER NUMBER NULL,
AGE NUMBER NULL,
JOINED DATE NOT NULL
)
CREATE TABLE ONLINE_SALE (
ONLINE_SALE_ID NUMBER NOT NULL,
USER_ID NUMBER NOT NULL,
PRODUCT_ID NUMBER NOT NULL,
SALES_AMOUNT NUMBER NOT NULL,
SALES_DATE DATE NOT NULL
)
- 내 풀이
SELECT
YEAR(O.SALES_DATE) AS YEAR,
MONTH(O.SALES_DATE) AS MONTH,
COUNT(DISTINCT(U.USER_ID)) AS PUCHASED_USERS,
ROUND(COUNT(DISTINCT(U.USER_ID)) / (SELECT COUNT(USER_ID) FROM USER_INFO WHERE JOINED LIKE '2021%'), 1) AS PUCHASED_RATIO
FROM USER_INFO U INNER JOIN ONLINE_SALE O
ON U.USER_ID = O.USER_ID
AND YEAR(U.JOINED) = 2021
GROUP BY YEAR(O.SALES_DATE) , MONTH(O.SALES_DATE)
ORDER BY MONTH(O.SALES_DATE) ASC;
SQL은 어려울 것이 많이 없었는데 문제를 이상하게 써놔서 이해하는게 더 오래 걸린거 같네...
YEAR , MONTH 함수는 평소에 잘 쓰지 않던 건데 좋은 걸 배웠다
Oracle에서 Mysql로 설정이 변경되어 있었다 그래 뭔가 이상하더라...
둘다 사용하다보니 더 헷갈린다
TO_CHAR(S.SALES_DATE, 'YYYY')AS YEAR,
TO_CHAR(S.SALES_DATE, 'MM')AS MONTH, 변경해야함
댓글