[SQL연습] 상품을 구매한 회원 비율 구하기 - 프로그래머스

AMUD·2022년 10월 22일
1

My Database

목록 보기
5/13

문제


문제링크

접근

  • "이게 왜 틀리지? 문제 오류인가?" 인가를 정말 많이 반복하였다. 그런데 결론적으로 문제에는 오류 하나 없어서 머쓱하였다.
  • (2021년에 가입한 회원 중 상품을 구매한 회원수) / (2021년에 가입한 전체 회원 수)를 최종적으로 구현해야 하는데 편의상 (분자) / (분모)로 별칭한다.
  • 풀이할 때 아래 논리적 오류 큰 2가지 함정을 조심해야 한다.
    - 한 사람이 같은 년, 월에 2번 이상 구매할 수 있으므로 분자에서 중복을 제거해야 한다.
    - 2021년에 가입한 회원 중에 물건을 아예 구매 안한 사람도 분모에 포함되어야 한다.
  • 구현 방법은 DISTINCT로 중복을 제거하고, SELECT절에서의 서브쿼리로 분모를 제대로 명시해야 한다.

풀이

# mysql 정답
SELECT YEAR, MONTH, COUNT(*) AS PUCHASED_USERS,
	ROUND((COUNT(*)/ (SELECT COUNT(*)
					FROM USER_INFO WHERE YEAR(JOINED) = 2021)), 1) AS PUCHASED_RATIO
FROM (
    SELECT DISTINCT YEAR(S.SALES_DATE) AS YEAR, MONTH(S.SALES_DATE) AS MONTH, U.USER_ID
    FROM ONLINE_SALE S
    JOIN USER_INFO U ON S.USER_ID = U.USER_ID AND YEAR(JOINED) = 2021
) A
GROUP BY YEAR, MONTH
ORDER BY YEAR, MONTH
profile
210's Velog :: Ambition Makes Us Diligent

1개의 댓글

comment-user-thumbnail
2024년 1월 17일

처음에는 2021년 전체 사람을 어떻게 구해야 하는지 몰라서 찾아왔는데,
알고보니 중복 제거도 해줬어야 하는군요...
친절한 포스팅 덕분에 잘 배워갑니다 !

답글 달기