로그인 바로가기 하위 메뉴 바로가기 본문 바로가기
난이도
입문

기초 데이터 분석을 위한 핵심 SQL

임시 이미지 모원서
http://www.boostcourse.org/ds102/forum/137069
좋아요 1185 수강생 5968

안녕하세요 영상속에서 SUB QUERY를 사용한 해결방법이 아닌 JOIN을 사용하여 문제를 해결하는 방법을 올려보려합니다.

영상 속  16분 18초부터의 문제부터 시작됩니다. 


/* 1. FROM절 서브쿼리를 활용하여, SALES 테이블의 PRODUCT_CODE별 판매수량을 구하시오.*/
/* FROM절 서브쿼리 / SUM 함수 활용 */


1. 기존의 SUB QUERY를 사용한 해결방법 

SELECT  *
  FROM  (
		SELECT  PRODUCT_CODE
				,SUM(SALES_QTY) AS 판매수량
		  FROM  SALES
		 GROUP
			BY  PRODUCT_CODE
		)AS A; 


2. JOIN을 사용한 해결방법  ★★★★★

SELECT  A.PRODUCT_CODE,
		SUM(SALES_QTY) AS 판매수량
  FROM  SALES AS A
  LEFT
  JOIN  PRODUCT AS B
    ON  A.PRODUCT_CODE = B.PRODUCT_CODE
 GROUP 
    BY A.PRODUCT_CODE;



/* 2. (1) 명령어를 활용하여, PRODUCT 테이블과 LEFT JOIN 하시오.*/
/* LEFT JOIN 활용 */


1. 기존의 SUB QUERY를 사용한 해결방법 

SELECT  *
  FROM  (
		SELECT  PRODUCT_CODE
				,SUM(SALES_QTY) AS 판매수량
		  FROM  SALES
		 GROUP
			BY  PRODUCT_CODE
		)AS A
  LEFT
  JOIN  PRODUCT AS B
    ON  A.PRODUCT_CODE = B.PRODUCT_CODE;


2. JOIN을 사용한 해결방법  ★★★★★

CREATE TEMPORARY TABLE PRODUCT_TOTAL_SALES_QTY
SELECT  B.PRODUCT_CODE,
		SUM(SALES_QTY) AS 판매수량 
  FROM  SALES AS A
  LEFT
  JOIN  PRODUCT AS B
    ON  A.PRODUCT_CODE = B.PRODUCT_CODE
 GROUP 
    BY B.PRODUCT_CODE;
    
SELECT  * 
  FROM  PRODUCT_TOTAL_SALES_QTY AS A 
  LEFT
  JOIN  PRODUCT AS B 
    ON  A.PRODUCT_CODE = B.PRODUCT_CODE;

새로운 임시 테이블을 생성한 후 JOIN을 사용하여 해결하였습니다. 



/* 3. (2) 명령어를 활용하여, 카테고리 및 브랜드별 판매수량을 구하시오.*/
/* GROUP BY절 / SUM 함수 활용*/


1. 기존의 SUB QUERY를 사용한 해결방법 

SELECT  CATEGORY
		,BRAND
        ,SUM(판매수량) AS 판매수량
  FROM  (
		SELECT  PRODUCT_CODE
				,SUM(SALES_QTY) AS 판매수량
		  FROM  SALES
		 GROUP
			BY  PRODUCT_CODE
		)AS A
  LEFT
  JOIN  PRODUCT AS B
    ON  A.PRODUCT_CODE = B.PRODUCT_CODE
 GROUP
    BY  CATEGORY
		,BRAND;


2. JOIN을 사용한 해결방법  ★★★★★

SELECT  CATEGORY,
        BRAND,
        SUM(판매수량) AS 판매수량 
  FROM  PRODUCT_TOTAL_SALES_QTY AS A 
  LEFT
  JOIN  PRODUCT AS B 
    ON  A.PRODUCT_CODE = B.PRODUCT_CODE
 GROUP 
    BY CATEGORY,
       BRAND;

코드가 보다 직관적인 것을 볼 수 있습니다. 



++++ 수정 ★★★★★

임시테이블을 미리 생성하여 1번과 2번문제를 보다 간결하게 풀 수 있었습니다.


// 새로운 임시 테이블 생성 (중복된 코드)
CREATE TEMPORARY TABLE PRODUCT_TOTAL_SALES_QTY
SELECT  A.PRODUCT_CODE,
		SUM(SALES_QTY) AS 판매수량 
  FROM  SALES AS A
  LEFT
  JOIN  PRODUCT AS B
    ON  A.PRODUCT_CODE = B.PRODUCT_CODE
 GROUP 
    BY A.PRODUCT_CODE;


/* 1. FROM절 서브쿼리를 활용하여, SALES 테이블의 PRODUCT_CODE별 판매수량을 구하시오.*/
SELECT  * 
  FROM  PRODUCT_TOTAL_SALES_QTY;

/* 2. (1) 명령어를 활용하여, PRODUCT 테이블과 LEFT JOIN 하시오.*/
SELECT  * 
  FROM  PRODUCT_TOTAL_SALES_QTY AS A 
  LEFT
  JOIN  PRODUCT AS B 
    ON  A.PRODUCT_CODE = B.PRODUCT_CODE;

/* 3. (2) 명령어를 활용하여, 카테고리 및 브랜드별 판매수량을 구하시오.*/
SELECT  CATEGORY,
        BRAND,
        SUM(판매수량) AS 판매수량 
  FROM  PRODUCT_TOTAL_SALES_QTY AS A 
  LEFT
  JOIN  PRODUCT AS B 
    ON  A.PRODUCT_CODE = B.PRODUCT_CODE
 GROUP 
    BY CATEGORY,
       BRAND;