[프로그래머스 ORACLE SQL]년, 월, 성별 별 상품 구매 회원 수 구하기★INNER JOIN★
https://school.programmers.co.kr/learn/courses/30/lessons/131532
USER_INFO 테이블과 ONLINE_SALE 테이블에서 년, 월, 성별 별로 상품을 구매한 회원수를 집계하는 SQL문을 작성해주세요. 결과는 년, 월, 성별을 기준으로 오름차순 정렬해주세요. 이때, 성별 정보가 없는 경우 결과에서 제외해주세요.
VERSION 2.0
SELECT TO_CHAR(SALES_DATE , 'YYYY') AS YEAR , TO_NUMBER(TO_CHAR(SALES_DATE ,'MM')) AS MONTH ,
B.GENDER AS GENDER, COUNT(DISTINCT(A.USER_ID)) AS USERS
FROM ONLINE_SALE A
INNER JOIN USER_INFO B ON B.USER_ID = A.USER_ID
GROUP BY TO_CHAR(SALES_DATE , 'YYYY') , TO_NUMBER(TO_CHAR(SALES_DATE ,'MM')) , B.GENDER
HAVING B.GENDER IS NOT NULL
ORDER BY YEAR , MONTH , GENDER
==> COUNT(DISTINCT) ==> 중복값 제거해줘야 한다.
VERSION 1.0
1.
SELECT TO_CHAR(B.SALES_DATE , 'YYYY') AS YEAR , TO_NUMBER(TO_CHAR(B.SALES_DATE , 'MM')) AS MONTH ,
A.GENDER AS GENDER AS USERS
FROM ONLINE_SALE B
INNER JOIN USER_INFO A ON B.USER_ID = A.USER_ID
ORDER BY YEAR ASC , MONTH ASC , A.GENDER ASC
A ==> USER_INFO 테이블
B ==> ONLINE_SALE 테이블
INNER JOIN ==> ONLINE_SALE(B)에 있는 USER_ID와 USER_INFO(A)에 있는 USER_ID가 동일한거에 대해 JOIN
교집합을 추출하는 것이다.
2.
SELECT TO_CHAR(B.SALES_DATE , 'YYYY') AS YEAR , TO_NUMBER(TO_CHAR(B.SALES_DATE , 'MM')) AS MONTH ,
A.GENDER AS GENDER AS USERS , B.PRODUCT_ID , A.AGE , A.USER_ID , B.USER_ID
FROM ONLINE_SALE B
INNER JOIN USER_INFO A ON B.USER_ID = A.USER_ID
ORDER BY YEAR ASC , MONTH ASC , A.GENDER ASC
ONLINE_SALE 테이블(B) 과 USER_INFO(A) 테이블의 USER_ID가 동일한 데이터에 대해 교집합하여 데이터 추출
==> age에 null값 ==> A테이블에 이미 비어있던것!
==> INNER JOIN을 통해 GROUP절 사용시 A와 B 상관없이 GROUP 사용가능하다.
3.
SELECT TO_CHAR(B.SALES_DATE , 'YYYY') AS YEAR , TO_NUMBER(TO_CHAR(B.SALES_DATE , 'MM')) AS MONTH ,
A.GENDER AS GENDER , COUNT(DISTINCT(A.USER_ID)) AS USERS
FROM ONLINE_SALE B
INNER JOIN USER_INFO A ON B.USER_ID = A.USER_ID
GROUP BY TO_CHAR(B.SALES_DATE , 'YYYY') , TO_NUMBER(TO_CHAR(B.SALES_DATE , 'MM')) , A.GENDER
HAVING A.GENDER IS NOT NULL
ORDER BY YEAR ASC , MONTH ASC , A.GENDER ASC
==> GROUP BY ==> ONLINE_SALE(B) 테이블의 SALES_DATE 의 연도별 , ONLINE_SALE(B) 테이블의 월별 ,
USER_INFO(A) 테이블의 성별 데이터를 GROUP 화
==> HAVING 절을 통해 USER_INFO(A)테이블의 성별데이터가 NULL값이 아닌것에 대해서만 출력하기
'SQL > GROUP BY' 카테고리의 다른 글
[프로그래머스 ORACLE SQL]가격대별 상품개수★SUBSTR(열, 자를거 시작위치 , 자를거 끝 위치)★RPAD (0) | 2023.01.04 |
---|---|
[프로그래머스 ORACLE SQL]입양 시각 구하기(2)★FULL OUTER JOIN★CONNECT BY LEVEL절 실습!!!!★VER3.0 (0) | 2023.01.04 |
★WHERE 절 서브쿼리★LPAD★[프로그래머스 ORACLE SQL]즐겨찾기가 많은 식당 출력 (0) | 2023.01.04 |
[프로그래머스 ORACLE SQL]입양 시각 구하기(1)★BETWEEM★HH24 (0) | 2022.10.28 |
[프로그래머스 ORACLE SQL]동명 동물 수 찾기★FROM절의 서브쿼리★ (0) | 2022.10.27 |