https://school.programmers.co.kr/learn/courses/30/lessons/131534

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

풀이

위와 같은 테이블 구조에서

21년도 가입자의 연, 월 별 구매자 수와 구매자 비율을 구하는 문제

 

ONLINE_SALE 테이블의 user_id, sales_date

USER_INFO 테이블의 user_id, joined

 

 

1. sales_date 의 연도가 2021 인 USER_INFO 와 ONLINE_SALES 를 inner join

2. ONLINE_SALES 의 sales_date 연, 월로 group by

3. select 절에서 year, month 함수를 통해 sales_date 에서 각각 연, 월 출력

4.  21년 가입자 중, 22년 구매 내역이 있는 사용자의 조회를 위해 count 함수 사용

5. (4번 / USER_INFO 에서 가입년도가 2021인 유저의 수) 의 값을 구한 후 round 함수로 소수 첫번 째 자리까지 출력

 

여기서 주의해야 하는 점이 바로 중복되는 데이터

 

2021 년에 가입한 A 라는 사용자가

2022년 1월에 2번

2022년 2월에 1번 구매 내역이 있는 경우

월 별 구매 회원 수를 구해야 하기 때문에

1월, 2월 각각 1의 값 출력 필요

 

count 함수를 사용할 때 distinct 를 써서 같은 달에 여러 구매내역을 가진 유저의 중복을 제거

 

 

select year(sales_date) as year, month(sales_date) as month, count(distinct o.user_id) as puchased_users,
round(
count(distinct o.user_id)/
    (select count(*)
    from user_info  
    where year(joined) = 2021),1) as puchased_ratio
from user_info as u, online_sale as o
where u.user_id = o.user_id and year(u.joined) = 2021
group by year(sales_date), month(sales_date);

+ Recent posts