728x90
문제
https://school.programmers.co.kr/learn/courses/30/lessons/131534#qna
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
- 2021년에 가입한 전체 회원들 중
- 상품을 구매한 회원수와 상품을 구매한 회원의 비율
( = 2021년에 가입한 회원 중 상품을 구매한 회원수 / 2021년에 가입한 전체 회원 수) 년, 월 별로 출력 - 상품을 구매한 회원의 비율은 소수점 두번째자리에서 반올림
- 년 기준 오름차순, 년이 같다면 월 기준 오름차순 정렬
- 쿼리 결과 : 년, 월 , 상품을 구매한 회원수, 상품을 구매한 회원의 비율
테이블
USER_INFO | ![]() |
ONLINE_SALE | ![]() |
풀이과정
# 2021년에 가입한 회원
- 두 테이블 조인
- 2021년에 가입한 회원들만 필터링
1 2 3 4 | SELECT * FROM USER_INFO UI JOIN ONLINE_SALE OS ON UI.USER_ID = OS.USER_ID AND UI.JOINED LIKE '2021%' | cs |
# 년, 월 별로 상품을 구매한 회원수와 상품을 구매한 회원의 비율
- 분자 : 2021년에 가입한 회원 중 상품을 구매한 회원수
1 2 3 4 5 6 7 8 | SELECT YEAR(OS.SALES_DATE) YEAR, MONTH(OS.SALES_DATE) MONTH, COUNT(DISTINCT OS.USER_ID) PURCHASED_USERS FROM USER_INFO UI JOIN ONLINE_SALE OS ON UI.USER_ID = OS.USER_ID AND UI.JOINED LIKE '2021%' GROUP BY YEAR, MONTH ORDER BY YEAR, MONTH | cs |
- 분모 : 2021년에 가입한 전체 회원 수
1 2 3 | SELECT COUNT(DISTINCT USER_ID) FROM USER_INFO WHERE JOINED LIKE '2021%' | cs |
# 정답
- 년, 월 별로 그룹화해 상품을 구매한 회원수, 상품을 회원수 비율 모두 조회하면 끝!
1 2 3 4 5 6 7 8 9 10 11 12 | SELECT YEAR(OS.SALES_DATE) YEAR, MONTH(OS.SALES_DATE) MONTH, COUNT(DISTINCT OS.USER_ID) PURCHASED_USERS, ROUND(COUNT(DISTINCT OS.USER_ID) / (SELECT COUNT(DISTINCT USER_ID) FROM USER_INFO WHERE JOINED LIKE '2021%') , 1) PURCHASED_RATIO FROM USER_INFO UI JOIN ONLINE_SALE OS ON UI.USER_ID = OS.USER_ID AND UI.JOINED LIKE '2021%' GROUP BY YEAR, MONTH ORDER BY YEAR, MONTH | cs |
728x90
'코딩테스트 > SQL 코드카타' 카테고리의 다른 글
MySQL 프로그래머스 | 입양 시각 구하기2 (SQL식 반복문 : RECURSIVE 재귀 가상테이블 만들기) (3) | 2024.09.23 |
---|---|
MySQL 프로그래머스 | FrontEnd 개발자 찾기 (비트 연산자로 조인하기) (0) | 2024.09.20 |
MySQL 프로그래머스 | 그룹별 조건에 맞는 식당 목록 출력하기 (1) | 2024.09.18 |
MySQL 프로그래머스 | 자동차 대여 기록 별 대여 금액 구하기 (ON과 WHERE절 차이) (2) | 2024.09.17 |
MySQL 프로그래머스 | 특정 기간동안 대여 가능한 자동차들의 대여비용 구하기 (0) | 2024.09.16 |
댓글