본문 바로가기

프로그래머스(Oracle)

[프로그래머스 (Oracle)] 년, 월, 성별 별 상품 구매 회원 수 구하기

728x90

힌트

  1. 날짜 처리
    • TO_CHAR(SALES_DATE, 'YYYY')와 TO_NUMBER(TO_CHAR(SALES_DATE, 'MM'))를 사용하여 날짜에서 연도와 월을 추출합니다.
    • 이는 후속 집계 및 정렬을 용이하게 합니다.
  2. JOIN 사용
    • USER_INFO 테이블과 ONLINE_SALE 테이블을 USER_ID를 기준으로 조인하여 판매와 관련된 사용자 정보를 결합합니다.
    • 이를 통해 판매 기록에 대한 사용자 정보를 확보할 수 있습니다.
  3. 조건 필터링
    • WHERE GENDER IS NOT NULL 조건을 사용하여 성별 정보가 없는 레코드는 제외합니다.
    • 이를 통해 결과의 정확성을 높입니다.
  4. 그룹화와 집계
    • GROUP BY 절을 통해 연도, 월, 성별에 따라 데이터를 그룹화하고, 각 그룹의 고유 사용자 수를 계산합니다.
    • COUNT(DISTINCT U.USER_ID)를 사용하여 중복되지 않는 사용자 수를 세어 사용자의 다양성을 평가합니다.
  5. 정렬
    • 최종 결과는 연도, 월, 성별 순서로 정렬되어 가독성을 높이고 분석하기 쉽게 합니다.

정답은 더보기 클릭

더보기
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
728x90