Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 | 31 |
Tags
- Aspect
- transformer
- join
- NLP
- leetcode
- paper review
- ABAE
- MySQL
- 파이썬
- GPT
- 연구
- 머신러닝
- 자연어처리
- 백준
- dfs
- 분산
- 알고리즘
- ChatGPT
- SQL 첫걸음
- Bert
- 논문리뷰
- 프로그래머스
- outer join
- 가상환경
- SQL
- LLM
- gpt1
- deepseek
- 코딩테스트
- 그래프
Archives
- Today
- Total
huginn muninn
[프로그래머스] 상품을 구매한 회원 비율 구하기 SQL 본문
https://school.programmers.co.kr/learn/courses/30/lessons/131534
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr

전체 코드
WITH JOIN_2021 AS(
SELECT USER_ID,JOINED
FROM USER_INFO
WHERE YEAR(JOINED)=2021
),
JOIN_2021_COUNT AS(
SELECT COUNT(*) AS TOTAL
FROM USER_INFO
WHERE YEAR(JOINED)=2021
),
SALE AS(
SELECT
YEAR(SALE.SALES_DATE) AS YEAR,
MONTH(SALE.SALES_DATE) AS MONTH,
COUNT(DISTINCT(SALE.USER_ID)) AS CNT
FROM ONLINE_SALE AS SALE
JOIN JOIN_2021 AS JO
ON SALE.USER_ID=JO.USER_ID
GROUP BY YEAR(SALE.SALES_DATE),MONTH(SALE.SALES_DATE)
)
SELECT
S.YEAR,
S.MONTH,
S.CNT AS PURCHASED_USERS,
ROUND(S.CNT/J.TOTAL,1) AS PUCHASED_RATIO
FROM SALE AS S,JOIN_2021_COUNT AS J
ORDER BY S.YEAR,S.MONTH
까다로웠지만 이것도 차근차근 풀다보면 풀리는 문제... 쿼리가 중첩으로 들어가있는 걸 별로 안좋아해서 이번에도 with을 적극적으로 사용해서 풀 수 있었다. 각각 분리해서 설명해보겠다.
1. user_info에서 2021년에 가입한 회원 찾기 - join_2021, join_2021_count
WITH JOIN_2021 AS(
SELECT USER_ID,JOINED
FROM USER_INFO
WHERE YEAR(JOINED)=2021
),
JOIN_2021_COUNT AS(
SELECT COUNT(*) AS TOTAL
FROM USER_INFO
WHERE YEAR(JOINED)=2021
),
2021년에 가입한 회원을 찾는 테이블, 그다음에 2021에 가입한 회원 수를 계산하는 테이블 하나를 만들었다.
2. 2021년에 가입한 회원들이 online_sale 테이블에서 년,월별로 2021년에 가입한 전체 회원들 중 상품을 구매한 회원수 - sale
SALE AS(
SELECT
YEAR(SALE.SALES_DATE) AS YEAR,
MONTH(SALE.SALES_DATE) AS MONTH,
COUNT(DISTINCT(SALE.USER_ID)) AS CNT
FROM ONLINE_SALE AS SALE
JOIN JOIN_2021 AS JO
ON SALE.USER_ID=JO.USER_ID
GROUP BY YEAR(SALE.SALES_DATE),MONTH(SALE.SALES_DATE)
)
여기서 미리 만들어 둔 join_2021 테이블을 sale과 조인해서 2021년에 가입한 회원들을 가져온다. 그리고 년,월별로 상품을 구매한 회원수를 구한다. 여기서 회원 수 셀 때는 중복을 제거해줘야 한다.
3. 계산
SELECT
S.YEAR,
S.MONTH,
S.CNT AS PURCHASED_USERS,
ROUND(S.CNT/J.TOTAL,1) AS PUCHASED_RATIO
FROM SALE AS S,JOIN_2021_COUNT AS J
ORDER BY S.YEAR,S.MONTH
앞전에 계산해 둔 2021년에 가입한 회원수 테이블과 sale 테이블을 조인해서 계산하면 끝.
'코딩테스트' 카테고리의 다른 글
| [leetcode] 550. Game Play Analysis IV 문제 풀이와 윈도우 함수를 사용할 수 있는 위치 (0) | 2024.06.19 |
|---|---|
| [프로그래머스] 연간 평가점수에 해당하는 평가 등급 및 성과금 조회 (0) | 2024.06.19 |
| [프로그래머스] 그룹별 조건에 맞는 식당 목록 출력하기 SQL (1) | 2024.06.13 |
| [프로그래머스] 특정 기간동안 대여 가능한 자동차들의 대여비용 구하기 SQL (0) | 2024.06.13 |
| [프로그래머스] 조건에 맞는 개발자 찾기 SQL (1) | 2024.04.19 |