https://school.programmers.co.kr/learn/courses/30/lessons/131534
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
ONLINE_SALE 테이블에서 같은 회원이 여러번 주문했을 수 있으니까 DISTINCT를 사용해서 COUNT 했다.
2021년에 가입한 전체 회원들 중 상품을 구매한 회원수 : ONLINE_SALE에 USER_INFO를 JOIN 한 뒤 WHERE 절로 가입날짜인 JOINED를 2021로 찾으면, 상품을 구매한 사람들 중 2021년에 가입한 사람들이다. 말의 앞뒤가 다른 것 같지만 같은 의미라고 생각함.
WITH TMP AS (
SELECT
COUNT(USER_ID) AS CNT
FROM USER_INFO
WHERE YEAR(JOINED) = 2021
)
2021년에 가입한 전체 회원수를 WITH 문으로 따로 구해놓고 서브쿼리로 나중에 이용한다.
최종 쿼리
WITH TMP AS (
SELECT
COUNT(USER_ID) AS CNT
FROM USER_INFO
WHERE YEAR(JOINED) = 2021
)
SELECT
YEAR(SALES_DATE) AS YEAR,
MONTH(SALES_DATE) AS MONTH,
COUNT(DISTINCT A.USER_ID) AS PURCHASED_USERS,
ROUND(COUNT(DISTINCT A.USER_ID) / (SELECT CNT FROM TMP), 1) AS PURCHASED_RATIO
FROM
ONLINE_SALE A
LEFT JOIN USER_INFO B
ON A.USER_ID = B.USER_ID
WHERE
YEAR(JOINED) = 2021
GROUP BY
YEAR(SALES_DATE),
MONTH(SALES_DATE)
ORDER BY YEAR, MONTH;
'SQL' 카테고리의 다른 글
SQL 총 정리 (1) | 2024.11.18 |
---|---|
[SQL 고득점 Kit] String, Date : 카테고리 별 상품 개수 구하기 (0) | 2024.10.05 |
[SQL 고득점 Kit] JOIN : 그룹별 조건에 맞는 식당 목록 출력하기 (0) | 2024.10.05 |
[SQL 고득점 Kit] String, Date : 오랜 기간 보호한 동물(2) (1) | 2024.09.30 |
[SQL 고득점 Kit] JOIN : 보호소에서 중성화한 동물 (1) | 2024.09.10 |
댓글