문제
https://school.programmers.co.kr/learn/courses/30/lessons/131534
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
풀이과정
1. USER_INFO 테이블과 ONLINE_SALE 테이블을 사용한다.
2. 조건: 2021년에 가입한 전체 회원들 중
3. 상품을 구매한 회원수와 상품을 구매한 회원의 비율(=2021년에 가입한 회원 중 상품을 구매한 회원수 / 2021년에 가입한 전체 회원 수)을 년, 월 별로 출력
3-1. 년, 월로 그룹핑한다.
3-2. 2021년에 가입한 회원 중, 각 그룹에 구매한 이력이 있으면 카운팅한다. -> (distinct(count(user_id))
3-3. 2021년 가입한 전체 회원 수를 구하라 -> 따로 빼는 것이 계산이 쉽다.
3-4. 상품을 구매한 회원의 비율은 소수점 두번째자리에서 반올림하라
4. 전체 결과는 년을 기준으로 오름차순 정렬 년이 같다면 월을 기준으로 오름차순 정렬
풀이
with a as(
select user_id
from user_info
where year(joined) = '2021'
), -- 2021년 가입한 전체 회원수
b as (
select year(sales_date) year, month(sales_date) month, user_id, product_id
from online_sale
where user_id in (select * from a)
) -- 2021년에 가입한 회원들의 구매기록 테이블
/*
(년, 월)로 그룹핑해서 해당 그룹에 구매 기록이 있는 회원 수를 중복없이 카운팅 -> count(distinct(user_id))
a를 이용해 "2021년에 가입한 회원 중 상품을 구매한 회원수 / 2021년에 가입한 전체 회원 수"를 구한 후 round를 이용해 소수점 두번째 자리에서 반올림한다.
*/
select year, month, count(distinct(user_id)) purchased_users, round(count(distinct(user_id))/(select count(user_id) from a), 1) purchased_ratio
from b
group by year, month
order by 1, 2;
'알고리즘' 카테고리의 다른 글
[JAVA]자바로 반올림 하기 (0) | 2024.10.21 |
---|---|
[SQL]프로그래머스: 5월 식품들의 총매출 조회하기 (0) | 2024.04.24 |
[JAVA]백준 15685: 드래곤 커브 (0) | 2024.02.04 |
[SQL]프로그래머스 59405: 상위 n개 레코드 (0) | 2023.12.29 |
[SQL]프로그래머스 131537: 오프라인/온라인 판매 데이터 통합하기 (1) | 2023.12.27 |