프로그래머스(Oracle)
[프로그래머스 (Oracle)] 년, 월, 성별 별 상품 구매 회원 수 구하기
shs00925
2024. 10. 5. 17:14
힌트
- 날짜 처리
- TO_CHAR(SALES_DATE, 'YYYY')와 TO_NUMBER(TO_CHAR(SALES_DATE, 'MM'))를 사용하여 날짜에서 연도와 월을 추출합니다.
- 이는 후속 집계 및 정렬을 용이하게 합니다.
- JOIN 사용
- USER_INFO 테이블과 ONLINE_SALE 테이블을 USER_ID를 기준으로 조인하여 판매와 관련된 사용자 정보를 결합합니다.
- 이를 통해 판매 기록에 대한 사용자 정보를 확보할 수 있습니다.
- 조건 필터링
- WHERE GENDER IS NOT NULL 조건을 사용하여 성별 정보가 없는 레코드는 제외합니다.
- 이를 통해 결과의 정확성을 높입니다.
- 그룹화와 집계
- GROUP BY 절을 통해 연도, 월, 성별에 따라 데이터를 그룹화하고, 각 그룹의 고유 사용자 수를 계산합니다.
- COUNT(DISTINCT U.USER_ID)를 사용하여 중복되지 않는 사용자 수를 세어 사용자의 다양성을 평가합니다.
- 정렬
- 최종 결과는 연도, 월, 성별 순서로 정렬되어 가독성을 높이고 분석하기 쉽게 합니다.
정답은 더보기 클릭
더보기
SELECT TO_CHAR(SALES_DATE, 'YYYY') AS YEAR, TO_NUMBER(TO_CHAR(SALES_DATE, 'MM')) AS MONTH,
GENDER, COUNT(DISTINCT U.USER_ID) AS USERS
-- 판매 날짜(SALES_DATE)에서 연도(YYYY)와 월(MM) 정보를 추출하고,
-- 성별(GENDER)별로 고유 사용자 수(USERS)를 계산합니다.
FROM USER_INFO U
JOIN ONLINE_SALE O
ON U.USER_ID = O.USER_ID
-- 성별이 NULL이 아닌 데이터만 포함합니다.
WHERE GENDER IS NOT NULL
-- 연도, 월, 성별을 기준으로 그룹화합니다.
GROUP BY TO_CHAR(SALES_DATE, 'YYYY'), TO_NUMBER(TO_CHAR(SALES_DATE, 'MM')), GENDER
-- 결과를 연도, 월, 성별 순으로 정렬합니다.
ORDER BY YEAR, MONTH, GENDER