반응형
SQL JOIN 마지막 문제! LV5 문제이다 : )
LV1 부터 순차적으로 풀다보니 복잡한 쿼리문도 차근차근 풀 수 있게 되었다.
1. 출처
- 회원 중 2021년에 가입한 총 인원 수를 구할 것 (1번 조건)
- 1번 조건 회원 중 상품을 구매한 인원 수를 구할 것 (년도 별, 월 별) (2번 조건)
- 2번조건 / 1번조건 을 연산하여 년도, 월별 상품을 구매한 회원 비율을 구하는 것이 목표
- 정렬은 년도별 -> 월별
2. 설계
1) 2021년에 가입한 전체 회원 수 구하기 (조건1)
# 1. 2021년에 가입한 전체 회원 수
SELECT COUNT(DISTINCT u.USER_ID)
FROM ONLINE_SALE o JOIN USER_INFO u ON o.USER_ID=u.USER_ID
WHERE u.JOINED BETWEEN '2021-01-01' AND '2021-12-31'
2) 2021년에 가입한 회원 중 상품을 구매한 회원 수(년도별, 월별) (조건2)
2021년에 가입한 회원을 년도별, 월별로 세주는 것이다.
한 명이 상품을 여러 개 샀을 경우 id가 중복해서 여러 번 나오는 경우가 있기 때문에 COUNT 연산 시 DISTINCT를 사용해준다.
# 2. 2021년에 가입한 회원 중 상품을 구매한 회원수
SELECT YEAR(o.SALES_DATE) AS YEAR, MONTH(o.SALES_DATE) AS MONTH, COUNT(DISTINCT u.USER_ID) AS PUCHASED_USERS
FROM ONLINE_SALE o JOIN USER_INFO u ON o.USER_ID=u.USER_ID
WHERE u.JOINED BETWEEN '2021-01-01' AND '2021-12-31'
GROUP BY YEAR(o.SALES_DATE), MONTH(o.SALES_DATE)
3. 전체 코드
SELECT YEAR(o.SALES_DATE) AS YEAR, MONTH(o.SALES_DATE) AS MONTH, COUNT(DISTINCT u.USER_ID) AS PUCHASED_USERS, ROUND(COUNT(DISTINCT u.USER_ID)/(
SELECT COUNT(DISTINCT u.USER_ID)
FROM USER_INFO u
WHERE u.JOINED BETWEEN '2021-01-01' AND '2021-12-31'
),1) AS PUCHASED_RATIO
FROM ONLINE_SALE o JOIN USER_INFO u ON o.USER_ID=u.USER_ID
WHERE u.JOINED BETWEEN '2021-01-01' AND '2021-12-31'
GROUP BY YEAR(o.SALES_DATE), MONTH(o.SALES_DATE)
ORDER BY YEAR(o.SALES_DATE), MONTH(o.SALES_DATE)
조건1(2021년에 가입한 전체 회원 수)을 스칼라 쿼리를 이용해 SELECT 문에 적용해줬다.
그리고 조건 1을 분모로 두고, 분자에 조건2의 COUNT 문을 적용해줬다.
반응형
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 조건에 부합하는 중고거래 상태 조회하기 [#SQL] (0) | 2024.10.07 |
---|---|
[SELECT] SQL 고득점 키트 문제 풀이 모음 (3) | 2024.05.11 |
[프로그래머스] lv2. 땅따먹기 [#DP] (0) | 2024.03.08 |
[프로그래머스] FrontEnd 개발자 찾기 [#SQL] (0) | 2024.03.07 |
[프로그래머스] 그룹별 조건에 맞는 식당 목록 출력하기 [#SQL] (0) | 2024.03.06 |