일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- c#기본문법
- unity공부
- 유니티게임만들기
- c# 백준
- c# c#프로그래머스
- c#프로그래머스기초문법
- 스파르타코딩클럽
- C#문법
- unity3d
- 유니티공부
- 스파르타
- 시샵문법
- 유니티3dui
- c#코딩기초트레이닝
- 유니티
- c#
- 유니티서바이벌게임만들기
- Console.WriteLine
- Unity
- 유니티상호작용
- unity게임만들기
- c#코테
- c#문제
- unity3d게임만들기
- 시샵
- 오블완
- 티스토리챌린지
- c#기초문법
- unity3dservival
- unity게임
- Today
- Total
나 개발자 진짜 되냐?
[ SQL_JOIN / 서브쿼리 / ROUND / YEAR ] 상품을 구매한 회원 비율 구하기 - 깊은 해석 본문
[ SQL_JOIN / 서브쿼리 / ROUND / YEAR ] 상품을 구매한 회원 비율 구하기 - 깊은 해석
Snow Rabbit 2023. 1. 6. 19:57
후후후ㅜ후..
굉장히 어려운 문제였어요..
결국 답지를 찾아봤지만
그냥 조인으로 끝낼 문제가 아니라
서브쿼리 까지 활용했어야하는 문제였다.
처음에는 답을 보고도 이해하지 못했기 때문에...
이 글을 읽는 그대는
내 글을 보고 해석이 되었으면 좋겠다.
SELECT YEAR, MONTH, COUNT(*) AS PUCHASED_USERS,
먼저 문제에서 보다시피
2021에 가입된 사람들 중 구매한 회원수, 구매한 회원의 비율, 년, 월 이렇게 4개를 적는다.
맨 위에 SELECT 에 적은 YEAR, MONTH는
음..AS 뒤에오는 변수라고 생각해도 된다.
회원 수 이기 때문에 일단 COUNT를 써주고 전체로 묶어준다.
전체로 묶어주는 이유는 FROM에서 서브쿼리로 조인해주면
그 값을 세어주기만 하면 되기 때문이다.
문제에서 소수점 둘째까지라고 했기 때문에 1 을써주고
.ROUND((들어갈 숫자),1) 를 써준다.
ROUND((COUNT(*) / (SELECT COUNT(*) FROM USER_INFO WHERE YEAR(JOINED) = 2021)), 1)
여기서 우리가 주목해야하는 점은 슬래쉬 뒤에 위치한 부분이다.
서브쿼리로 분모를 정확히 짚어줘야한다.
USER_INFO에서 JOINED이 2021인 애들을 카운트 해준다.
그 다음 FROM에서 서브쿼리로 JOIN을 해준다.
FROM (
SELECT DISTINCT YEAR(O.SALES_DATE) AS YEAR, MONTH(O.SALES_DATE) AS MONTH, U.USER_ID
FROM ONLINE_SALE O JOIN USER_INFO U ON O.USER_ID = U.USER_ID
WHERE YEAR(JOINED) = 2021
) A
우선 YEAR과 MONTH를 재정의 해준다.
우리는 SALES_DATE를 출력해줘야하기 때문이다.
여기서
YEAR에 중복제거(DISTINCT)를 하는 이유가 정말 어려웠다.
일단 떠오를거같지도 않지만..
이걸 빼면 오류가 생기더라. 이런 예상도 해야한다는 생각에..손이 덜덜덜덜이었다.
하는 이유는!
만약 한 사람이 같은 날 두개의 물건을 사게되면
SALES_DATE에 값이 두 개 찍히게 된다. 그렇게 되면 PUCHASED_USERS 값이 커지게 되고 그렇게 분자 값이 커지게 되면서 PUCHASED_USERS 값이 변하게 된다. 그러면 맨 위에 서브쿼리에서 RATIO 값도 달라지게 된다.
GROUP BY YEAR, MONTH
ORDER BY YEAR, MONTH
나는 왜 GROUP를 해주어야하나..싶었는데
제일 마지막줄에 "년, 월 별로 상품을..." 이라는 글을 보고
묶게 되었다..ㅎㅎ
어렵다...어려워
'SQL을 해보았어요!' 카테고리의 다른 글
[ SQL_JOIN ] 상품 별 오프라인 매출 구하기 (0) | 2023.01.06 |
---|---|
[ SQL_SELECT / UNION, JOIN을 못쓰는 이유 ] 오프라인/온라인 판매 데이터 통합하기 (0) | 2023.01.06 |
[ SQL_SELECT / LIMIT ] 상위 n개 레코드 (0) | 2023.01.06 |
[ SQL_SELECT / LIKE ] 강원도에 위치한 생산공장 목록 출력하기 (0) | 2023.01.06 |
[ SQL_SELECT / DATA_FORMAT, MONTH ] 3월에 태어난 여성 회원 목록 출력하기 (0) | 2023.01.06 |