문제
2021년에 가입한 전체 회원들 중 상품을 구매한 회원수와 상품을 구매한 회원의 비율
👉 (=2021년에 가입한 회원 중 상품을 구매한 회원수 / 2021년에 가입한 전체 회원 수)을 년, 월 별로 출력하는 SQL문을 작성
- 상품을 구매한 회원의 비율은 소수점 두번째자리에서 반올림하고,
- 전체 결과는 년을 기준으로 오름차순 정렬해주시고 년이 같다면 월을 기준으로 오름차순 정렬할 것!
https://school.programmers.co.kr/learn/courses/30/lessons/131534
풀이
1. 회원ID를 기준으로 두 테이블을 조인하고,
2. WHERE 절에 가입연도 2021년 조건을 걸어준다
3. SELECT 절에, 연 & 월을 추출해서 GROUP BY 기준으로 지정하고
4. 구매자 수를 구하기 위해 조인 결과에서 DISTINCT한 유저 수를 COUNT 한다
5. 전체 유저수를 4의 유저수로 나누기 위해 서브쿼리를 사용한다.(이때도 가입연도 조건을 꼭 걸어줘야 정확히 집계됨)
→ 아래 쿼리 참고
SELECT COUNT(*)
FROM USER_INFO
WHERE YEAR(JOINED) = 2021
🎯 최종 쿼리
SELECT
YEAR(SALES_DATE) AS YEAR,
MONTH(SALES_DATE) AS MONTH,
-- 조인 결과에서 online_sale의 user_id 수(고윳값)이 구매자 수
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 ONLINE_SALE AS o
-- 회원ID 기준으로 조인
LEFT JOIN USER_INFO AS u
ON o.USER_ID = u.USER_ID
WHERE YEAR(u.JOINED) = 2021 #가입연도 2021 조건
GROUP BY
YEAR,
MONTH
ORDER BY
YEAR,
MONTH
728x90
'SQL > SQL test' 카테고리의 다른 글
[Programmers] 특정 기간동안 대여 가능한 자동차 대여 비용(풀이) (0) | 2024.04.09 |
---|---|
[HackerRank] Interviews (Advanced Join) 풀이 (2) | 2024.01.17 |
[HackerRank] Occupations (Pivot) (0) | 2024.01.17 |
[HackerRank] SQL Project Planning (0) | 2024.01.17 |
[HackerRank] Contest Leaderboard (0) | 2024.01.16 |