https://school.programmers.co.kr/learn/courses/30/lessons/131534
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
-- 2021년에 가입한 전체 회원수
SET @TOTAL = (SELECT COUNT(DISTINCT(USER_ID)) FROM USER_INFO WHERE YEAR(JOINED)=2021);
-- 2021년에 가입한 회원 ID
WITH USER_ID_TABLE AS(
SELECT USER_ID
FROM USER_INFO
WHERE YEAR(JOINED) = 2021
)
-- 쿼리
SELECT
YEAR(O.SALES_DATE) AS YEAR,
MONTH(O.SALES_DATE) AS MONTH,
COUNT(DISTINCT(O.USER_ID)) AS PUCHASED_USERS,
ROUND((COUNT(DISTINCT(O.USER_ID)) / @TOTAL), 1) AS PUCHASED_RATIO
FROM ONLINE_SALE O
JOIN USER_ID_TABLE AS U
ON O.USER_ID = U.USER_ID
WHERE O.SALES_AMOUNT >= 1
GROUP BY YEAR, MONTH
ORDER BY YEAR ASC, MONTH ASC
SET, WITH 명령어와 JOIN문을 통하여 문제를 해결하였습니다.
SET
-- 2021년에 가입한 전체 회원수
SET @TOTAL = (SELECT COUNT(DISTINCT(USER_ID)) FROM USER_INFO WHERE YEAR(JOINED)=2021);
먼저 2021년에 상품을 구매한 회원의 비율을 구하려면 2021년에 가입한 전체 회원 수를 구해야 합니다
위의 코드를 통하여 2021년에 가입한 전체 회원 수를 구하였습니다.
COUNT()와 DISTINCT() 함수를 통하여 중복없이 회원 수를 세어 @TOTAL 변수에 저장하였습니다.
아래의 코드를 통하여 결과를 확인해볼 수 있습니다.
-- 2021년에 가입한 전체 회원수
SET @TOTAL = (SELECT COUNT(DISTINCT(USER_ID)) FROM USER_INFO WHERE YEAR(JOINED)=2021);
SELECT @TOTAL;
WITH
-- 2021년에 가입한 회원 ID
WITH USER_ID_TABLE AS(
SELECT USER_ID
FROM USER_INFO
WHERE YEAR(JOINED) = 2021
)
WITH문을 통하여 2021년에 가입한 회원 ID를 추출하여 USER_ID_TABLE에 저장하였습니다.
코드의 간결성을 위하여 사용하였습니다.
아래의 코드를 통하여 결과를 확인해볼 수 있습니다.
-- 2021년에 가입한 회원 ID
WITH USER_ID_TABLE AS(
SELECT USER_ID
FROM USER_INFO
WHERE YEAR(JOINED) = 2021
)
SELECT * FROM USER_ID_TABLE
쿼리
-- 쿼리
SELECT
YEAR(O.SALES_DATE) AS YEAR,
MONTH(O.SALES_DATE) AS MONTH,
COUNT(DISTINCT(O.USER_ID)) AS PUCHASED_USERS,
ROUND((COUNT(DISTINCT(O.USER_ID)) / @TOTAL), 1) AS PUCHASED_RATIO
FROM ONLINE_SALE O
JOIN USER_ID_TABLE AS U
ON O.USER_ID = U.USER_ID
WHERE O.SALES_AMOUNT >= 1
GROUP BY YEAR, MONTH
ORDER BY YEAR ASC, MONTH ASC
ONLINE_SALE 테이블과 위에서 만든 USER_ID_TABLE을 JOIN 하였습니다.
이때 WHERE문에서 상품을 구매한 회원의 정보를 이용하기 위하여 SALUE_MOUNT가 1 이상인 데이터만 추출하였습니다.
년(YEAR), 월(MONTH)을 기준으로 그룹화를 하고
COUNT(), DISTINCT() 함수를 사용하여 중복없이 2021년에 상품을 구매한 회원 수를 구하였습니다.
ROUND()와 위에서 구한 @TOTAL 변수를 사용하여 2021년 상품을 구매한 회원의 비율을 구하였고 문제에서 요구한대로 소수점 두번째자리에서 반올림하였습니다.
마지막으로 ORDER BY문에서 년(YEAR)을 기준으로 오름차순(ASC), 월(MONTH)을 기준으로 오름차순(ASC) 정렬하여 문제를 해결하였습니다.
'코딩테스트' 카테고리의 다른 글
[코딩테스트] 프로그래머스 조건에 맞는 도서 리스트 출력하기 MySQL (0) | 2022.12.17 |
---|---|
[코딩테스트] 프로그래머스 가장 가까운 같은 글자 파이썬(Python) (0) | 2022.12.15 |
[코딩테스트] 프로그래머스 짝지어 제거하기 파이썬(Python) (0) | 2022.12.14 |
[코딩테스트] 프로그래머스 오프라인/온라인 판매 데이터 통합하기 MySQL (0) | 2022.12.12 |
[코딩테스트] 프로그래머스 그룹별 조건에 맞는 식당 목록 출력하기 MySQL (0) | 2022.12.10 |