반응형
이 글은 프로그래머스 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)로 표시
반응형
'SQL > 프로그래머스 SQL' 카테고리의 다른 글
MySQL 프로그래머스 재구매가 일어난 상품과 회원 리스트 구하기 문제 답 (0) | 2023.10.30 |
---|---|
MySQL 프로그래머스 서울에 위치한 식당 목록 출력하기 문제 답 (1) | 2023.10.25 |
MySQL 프로그래머스 SQL 고득점 Kit 입양 시각 구하기(1) 문제 답 (0) | 2023.09.25 |
MySQL 프로그래머스 SQL 고득점 Kit 고양이와 개는 몇 마리 있을까 문제 답 (0) | 2023.09.19 |
MySQL 프로그래머스 SQL 고득점 Kit 동명 동물 수 찾기 문제 답 (0) | 2023.09.14 |