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);
'코딩테스트 > 문제풀이' 카테고리의 다른 글
[프로그래머스] 우유와 요거트가 담긴 장바구니 SQL (0) | 2023.09.26 |
---|---|
[프로그래머스] 자동차 평균 대여 기간 구하기 SQL (0) | 2023.09.26 |
[백준] 행렬 곱셈 순서 Java (0) | 2023.09.11 |
[백준] 내리막길 Java (0) | 2023.08.31 |
[백준] 퇴사 2 Java (0) | 2023.08.31 |