꿈꾸는 개발자의 블로그
[프로그래머스] Oracle - (SQL 고득점 Kit) JOIN 상품을 구매한 회원 비율 구하기 본문
Algorithm/Programmers
[프로그래머스] Oracle - (SQL 고득점 Kit) JOIN 상품을 구매한 회원 비율 구하기
aldrn29 2023. 2. 27. 13:57문제
USER_INFO 테이블과 ONLINE_SALE 테이블에서 1) 2021년에 가입한 전체 회원들 중 3) 상품을 구매한 회원수와 5) 상품을 구매한 회원의 비율(=2021년에 가입한 회원 중 상품을 구매한 회원수 / 4) 2021년에 가입한 전체 회원 수)을 2) 년, 월 별로 출력하는 SQL문을 작성해주세요. 상품을 구매한 회원의 비율은 소수점 두번째자리에서 반올림하고, 전체 결과는 년을 기준으로 오름차순 정렬해주시고 년이 같다면 월을 기준으로 오름차순 정렬해주세요.
문제 풀이
인라인 뷰 2개를 이용한 풀이
- 두 테이블을 JOIN 후, 가입한 날짜를 확인하기 위하여 WHERE 조건을 건다. (T1)
- 년, 월 별로 조회하기 위하여 GROUP BY로 묶는다. (T1)
- 상품을 구매한 회원수를 구하기 위하여 DISTINCT로 중복 회원을 제거하고, count 함수로 구한다. (T1)
- USER_INFO 테이블에서만 WHERE 조건을 걸어 전체 회원 수를 알아낸다. (T2)
- 상품을 구매한 회원의 비율을 계산한다.
스칼라 서브쿼리를 이용한 풀이
- 두 테이블을 JOIN 후, 가입한 날짜를 확인하기 위하여 WHERE 조건을 건다.
- 년, 월 별로 조회하기 위하여 GROUP BY로 묶는다.
- 상품을 구매한 회원수를 구하기 위하여 DISTINCT로 중복 회원을 제거하고, count 함수로 구한다.
- USER_INFO 테이블에서만 WHERE 조건을 걸어 전체 회원 수를 알아내고, 상품을 구매한 회원의 비율을 계산한다.
전체 코드
인라인 뷰 2개를 이용한 풀이
SELECT YEAR, MONTH, PUCHASED_USERS, ROUND(PUCHASED_USERS / TOTAL, 1) AS PUCHASED_RATIO -- 5
FROM (
/* T1 */
SELECT TO_CHAR(SALES_DATE, 'YYYY') AS YEAR,
TO_NUMBER(TO_CHAR(SALES_DATE, 'MM')) AS MONTH,
count(DISTINCT a.USER_ID) AS PUCHASED_USERS -- 3
FROM USER_INFO a JOIN ONLINE_SALE b ON a.USER_ID = b.USER_ID
WHERE TO_CHAR(JOINED, 'YYYY') = '2021' -- 1
GROUP BY TO_CHAR(SALES_DATE, 'YYYY'), TO_CHAR(SALES_DATE, 'MM') -- 2
), (
/* T2 */
SELECT count(DISTINCT USER_ID) AS TOTAL -- 4
FROM USER_INFO
WHERE TO_CHAR(JOINED, 'YYYY') = '2021'
)
ORDER BY 1, 2
스칼라 서브쿼리를 이용한 풀이
SELECT TO_CHAR(SALES_DATE, 'YYYY') AS YEAR,
TO_NUMBER(TO_CHAR(SALES_DATE, 'MM')) AS MONTH,
count(DISTINCT a.USER_ID) AS PUCHASED_USERS, -- 3
ROUND(count(DISTINCT a.USER_ID) / ( -- 4
SELECT count(DISTINCT USER_ID) AS TOTAL
FROM USER_INFO
WHERE TO_CHAR(JOINED, 'YYYY') = '2021'
), 1) AS PUCHASED_RATIO
FROM USER_INFO a JOIN ONLINE_SALE b ON a.USER_ID = b.USER_ID
WHERE TO_CHAR(JOINED, 'YYYY') = '2021' -- 1
GROUP BY TO_CHAR(SALES_DATE, 'YYYY'), TO_CHAR(SALES_DATE, 'MM') -- 2
ORDER BY 1, 2
728x90
728x90
'Algorithm > Programmers' 카테고리의 다른 글
[프로그래머스] Oracle - (SQL 고득점 Kit) String,Date 문제 풀이 (0) | 2023.03.03 |
---|---|
[프로그래머스] Oracle - (SQL 고득점 Kit) JOIN 상품 별 오프라인 매출 구하기 (0) | 2023.02.27 |
[프로그래머스] Oracle - (SQL 고득점 Kit) JOIN 보호소에서 중성화한 동물 (0) | 2023.02.27 |
[프로그래머스] Oracle - (SQL 고득점 Kit) JOIN 오랜 기간 보호한 동물(1) (0) | 2023.02.27 |
[프로그래머스] Oracle - (SQL 고득점 Kit) JOIN 있었는데요 없었습니다 (0) | 2023.02.27 |
Comments