https://school.programmers.co.kr/learn/courses/30/lessons/131534
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
✔️ 풀이
1. SELECT
PURCHASED_USERS : 2021년에 가입한 전체 회원들 중, 상품을 구매한 회원의 수 PURCHASED_RATIO : (2021년에 가입한 회원 중 상품을 구매한 회원 수) / (2021년에 가입한 회원 수) YEAR : PURCHASED_USERS, PURCHASED_RATIO를 년 별로 출력 MONTH : PURCHASED_USERS, PURCHASED_RATIO를 달별로 출력 |
- 문제 조건에서 조회해야 할 값을 정리하면 위와 같다.
- PURCHASED_USERS와 PURCHASED_RATIO에서 USER_ID를 조회할 때는 ID값이 중복되어 COUNT 되지 않도록 DISTINCT를 추가해줘야 함을 주의하자.
- PURCHASED_RATIO는 ROUND를 사용해 문제 조건에 맞게 소수점 두 번째 자리에서 반올림해 주기 위해 파라미터를 1로 설정하여 소수점 첫째 자리까지 표기한다.
2. FROM
- ONLINE_SALE 테이블 기준으로 USER_INFO 테이블과 LEFT JOIN하기 위해 ONLINE_SALE로 설정했다.
3. INNER JOIN
- 2021년에 가입한 회원을 조회하기 위해서는 USER_INFO 테이블의 JOINED 값을 알아야 하므로, USER_ID값이 동일한 것 끼리 ONLINE_SALE 테이블을 기준으로 USER_INFO 테이블과 LEFT JOIN 한다.
4. WHERE
- 2021년에 가입한 회원들 중에서 조회해야 하므로, YEAR(U.JOINED) = 2021로 설정한다.
5. GROUP BY
- 문제 조건에서 년, 달 별로 조회해야 하므로 YEAR, MONTH로 각각 그룹화 한다.
6. ORDER BY
- 전체 결과는 년을 기준으로 오름차순 정렬하며, 만약 년이 같으면 월을 기준으로 오름차순해야 정렬해 준다.
✔️ 코드
SELECT
YEAR(O.SALES_DATE) AS YEAR,
MONTH(O.SALES_DATE) AS MONTH,
COUNT(DISTINCT U.USER_ID) AS PURCHASED_USERS,
ROUND(COUNT(DISTINCT U.USER_ID) / (SELECT COUNT(*) FROM USER_INFO WHERE YEAR(JOINED) = 2021), 1) AS PURCHASED_RATIO
FROM ONLINE_SALE AS O
LEFT JOIN USER_INFO AS U ON O.USER_ID = U.USER_ID
WHERE YEAR(U.JOINED) = 2021
GROUP BY YEAR, MONTH
ORDER BY YEAR, MONTH;
'✔️ Algorithm > Programmars' 카테고리의 다른 글
[프로그래머스/MySQL] 5월 식품들의 총매출 조회하기 (0) | 2023.09.03 |
---|---|
[프로그래머스/MySQL] 상품 별 오프라인 매출 구하기 (0) | 2023.09.02 |
[프로그래머스/MySQL] 보호소에서 중성화한 동물 (0) | 2023.09.02 |
[프로그래머스/MySQL] 오랜 기간 보호한 동물(1) (0) | 2023.09.02 |
[프로그래머스/MySQL] 있었는데요 없었습니다 (0) | 2023.09.02 |
댓글