SQL/프로그래머스 SQL

MySQL 프로그래머스 상품을 구매한 회원 비율 구하기 문제 답

진리뷰 2023. 9. 26. 09:00
반응형

 

 

MySQL-프로그래머스-상품을-구매한-회원-비율-구하기-문제-답-썸네일
상품을 구매한 회원 비율 구하기

 

 

이 글은 프로그래머스 SQL 고득점 Kit 문제와 답을 정리한 글입니다.

*MySQL 버전입니다.

 

 

 

프로그래머스 상품을 구매한 회원 비율 구하기 문제

 

  • 문제 의도: JOIN 사용
  • 2021년 가입 회원 수, 2021년 가입 회원 수 중 구매 회원 수 구하기
  • (21년 가입 회원 중) 년, 월 별 구매 회원 비율 구하기
  • 구매 회원 비율은 소수점 두 번째 자리 반올림
  • 년, 월 기준 오름차순 정렬

 

상품을-구매한-회원-비율-구하기-문제
상품을 구매한 회원 비율 구하기 문제

 

 

 

프로그래머스 상품을 구매한 회원 비율 구하기 답

 

  • WITH 사용

처음에는 스칼라 서브쿼리/인라인뷰 사용을 생각.

그런데 생각보다 지저분하고 에러도 내서, WITH를 선택.

  • YEAR 함수 사용
  • DATE_FORMAT 사용

joined와 sales_date 컬럼의 데이터 타입이 날짜 정보만 입력하는 date였고, 원데이터에서도 시간 차이 없음을 확인했기에 INTERVAL 안 씀.

  • ROUND 함수 사용
  • JOIN 생략, FROM과 WHERE로 대체
  • YEAR, MONTH 컬럼 기준 그룹화 및 정렬

 

WITH cnt AS(
SELECT COUNT(user_id) AS u_cnt
FROM user_info
WHERE YEAR(joined) = 2021
)

SELECT DATE_FORMAT(sales_date, '%Y') AS YEAR
, DATE_FORMAT(sales_date, '%m') AS MONTH
, COUNT(DISTINCT o.user_id) AS PUCHASED_USERS
, ROUND(COUNT(DISTINCT o.user_id)/(SELECT u_cnt FROM cnt), 1) AS PUCHASED_RATIO

FROM user_info AS u, online_sale AS o

WHERE u.user_id = o.user_id AND YEAR(joined) = 2021

GROUP BY 1, 2

ORDER BY 1, 2;

 

 

프로그래머스 상품을 구매한 회원 비율 구하기 추가 정리

 

  • %c, %m

문제 예시에서는 MONTH컬럼 데이터가 1, 2,... 12처럼 숫자 한 글자 형식이다.

그래서 date_format에서 %c를 입력했는데 오답 처리 됨.

반면 01, 02처럼 숫자 두 글자 형식인 %m은 정답이라, 어쩔 수 없이 %m으로 입력함.

왜인지 아직 잘 모르겠다.

 

  •  데이터 타입

DATE: 3byte

DATETIME: 8byte

TIME: 3byte

YEAR: 1byte, 2자리나 4자리(default)로 표시

 

 

반응형
top