프로그래머스 Lv.5 "상품을 구매한 회원 비율 구하기" 문제입니다.
USER_INFO 테이블과 ONLINE_SALE 테이블에서 2021년에 가입한 전체 회원들 중 상품을 구매한 회원수와 상품을 구매한 회원의 비율(=2021년에 가입한 회원 중 상품을 구매한 회원수 / 2021년에 가입한 전체 회원 수)을 년, 월 별로 출력하는 SQL문을 작성해주세요. 상품을 구매한 회원의 비율은 소수점 두번째자리에서 반올림하고, 전체 결과는 년을 기준으로 오름차순 정렬해주시고 년이 같다면 월을 기준으로 오름차순 정렬해주세요.
문제 전문은 아래 링크에서 볼 수 있습니다.
꽤 여러 개념이 포함되어 있어서 풀어볼 만한 문제라고 생각됩니다.
Solved-Algorithm/MySQL/프로그래머스/5/131534. 상품을 구매한 회원 비율 구하기 at main · ParkBible/S
This is an auto push repository for Baekjoon Online Judge created with [BaekjoonHub](https://github.com/BaekjoonHub/BaekjoonHub). - ParkBible/Solved-Algorithm
github.com
정답 판정 받은 쿼리:
SELECT
YEAR(s.SALES_DATE) AS YEAR , MONTH(s.SALES_DATE) AS MONTH,
COUNT(DISTINCT s.USER_ID) AS PURCHASED_USERS,
ROUND(COUNT(DISTINCT s.USER_ID) / (SELECT COUNT(*) FROM USER_INFO s1 WHERE YEAR(JOINED) = "2021"), 1) AS PURCHASED_RATIO
FROM
USER_INFO u JOIN ONLINE_SALE s ON u.USER_ID = s.USER_ID
WHERE
YEAR(u.JOINED) = "2021"
GROUP BY
YEAR(s.SALES_DATE), MONTH(s.SALES_DATE)
ORDER BY
YEAR, MONTH
알아가면 좋은 것들 (위 쿼리에 없는 내용도 포함되어 있음)
- ROUND(실수, 표시할 소숫점 이하 자릿수) : 반올림
- COUNT(DISTINCT 컬럼명) : 컬럼명에 해당하는 값이 중복되지 않는 로우들의 개수만 카운트
- YEAR(컬럼명) : 연도를 문자열형으로 나타냄
- GROUP BY에 있는 HAVING : WHERE과 달리 집계된 "결과"를 필터링함. 집계 함수 사용 가능
- 집계 함수 종류 : COUNT, SUM, AVG, MAX, MIN
- WHERE 컬럼명 IN (1, 2, 3) : 1, 2, 3 중 하나에 포함된다면 참
- WHERE절 서브쿼리 : 컬럼 하나만 조회하여 IN에 넣는 경우 많음 ex) SELECT * FROM 테이블 WHERE seq IN (SELECT seq FROM 테이블2)
'IT > SQL' 카테고리의 다른 글
| [PostgreSQL] pg_cron 익스텐션 환경설정 (0) | 2025.12.15 |
|---|---|
| [SQL] NULL 다루기 (1) | 2024.10.31 |
| [SQL] JOIN 문법 (3) | 2024.10.02 |
| [SQL] 시간 비교 - timestampdiff (0) | 2024.04.17 |