| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | |||
| 5 | 6 | 7 | 8 | 9 | 10 | 11 |
| 12 | 13 | 14 | 15 | 16 | 17 | 18 |
| 19 | 20 | 21 | 22 | 23 | 24 | 25 |
| 26 | 27 | 28 | 29 | 30 | 31 |
- 1389자바
- Expo
- 자바
- 5430자바
- 1389 JAVA
- 퇴사
- 1012 java
- Ubuntu USB부팅
- 백준 1012 java
- mobaXTerm
- 1012 자바
- BFS
- 5430 java
- 백준 유기농 배추
- ubuntu
- 1697 자바
- 백준 1389 자바
- 노트북 서버
- 백준 2615
- React Native
- 백준 1697 자바
- 백준 1012 자바
- 백준
- 백준 5430자바
- 알고리즘
- Today
- Total
삽질메모장
programmers SQL Level 5 - 상품을 구매한 회원 비율 구하기 본문
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
-문제
USER_INFO 테이블과 ONLINE_SALE 테이블에서 2021년에 가입한 전체 회원들 중 상품을 구매한 회원수와 상품을 구매한 회원의 비율(=2021년에 가입한 회원 중 상품을 구매한 회원수 / 2021년에 가입한 전체 회원 수)을 년, 월 별로 출력하는 SQL문을 작성해주세요. 상품을 구매한 회원의 비율은 소수점 두번째자리에서 반올림하고, 전체 결과는 년을 기준으로 오름차순 정렬해주시고 년이 같다면 월을 기준으로 오름차순 정렬해주세요.
1. 2021년에 가입한 전체 회원중 상품을 구매한 회원수
1-1. USER_ID 를 카운트 하되 USER_INFO, ONLINE_SALE 조인하여 "구매한 회원"만 조회
1-2. online_sale 에는 한 회원의 여러 구매 이력이 있으므로 DISTINCT 하여 중복제거
2. (1.의 내용/2021년에 가입 한 전체 회원수)
2-1. 1. 과 똑같이 작성 / "2021의 가입 한 전체 회원수 서브쿼리 작성"
2-2. 서브쿼리 내용은 2021년 가입회원 count, 이때는 USER_INFO만 조회하므로 중복제거 불필요
2-3. 2자리는 반올림 : round( 쿼리, 1)
3. YEAR, MONTH 단위 묶음, 정렬
따로 SQL 문제는 풀어본적 없어서 간만에 감각 살릴겸 풀어봤다. 프로그래머스에서 가장 높은 난이도지만 굉장히 쉬워서 leetcode 에서 번역해가며 풀어보는게 나을것 같다.
SELECT
DATE_FORMAT(B.SALES_DATE, "%Y") as YEAR,
DATE_FORMAT(B.SALES_DATE, "%m") as month,
count(DISTINCT A.USER_ID) AS PUCHASED_USERS,
round((count(DISTINCT A.USER_ID) / (select count(*) from USER_INFO where JOINED LIKE("2021%"))), 1)
AS PUCHASED_RATIO
from USER_INFO A
join ONLINE_SALE B
on (A.USER_ID = B.USER_ID)
where A.JOINED LIKE("2021%")
group by YEAR,month
order by YEAR, month