제목: 상품 별 오프라인 매출 구하기

레벨: LEVEL2 

 

문제 가보자고~

 

호~ 특별히 주의 사항은 없다.

 

문제요약을 하자면 PRODUCT테이블과 OFFLINE_SALE 테이블을 합치고 

상품코드 컬럼, 매출액 컬럼을 가져오면 된다.

 

대신! 매출액은 판매가x판매량으로 계산해야하기 때문에 사칙연산을 써야한다.

 

 

 

정답은 이렇게!

 

여기서 중요한 건 GROUP BY와 매출액 사칙연산이다.

GROUP BY는 쉽게 말해 특정 컬럼을 그룹화하는 것이다.

 

 

만약 그룹화를 하지 않으면 

 

TYPE SALES_AMOUNT
1 4
1 2
2 3
4 7

 

이렇게 같은 타입이어도 각각 칸을 가지고 나타난다. 하지만 GROUP BY TYPE을 하게 되면

 

TYPE SALES_AMOUNT
1 6
2 3
4 7

 

이렇게 나온다. 여러개 보였던 타입1이 하나로 합쳐진 것!

 

문제를 보면 OFFLINE_SALE 테이블의 PRODUCT_ID 컬럼에는 중복되는 아이디가 많다.

이것을 GROUP BY로 그룹화를 시켜준 것이다.

 

이때! GROUP BY로 그룹화가 되면 SALES_AMOUNT 역시 그룹화에 따라서 합쳐져야 한다.

그렇기 때문에 SUM을 이용해 PRODUCT_ID = 1이 가진 SALES_AMOUNT를 모두 합치고 

거기에 PRICE를 곱해야 지금까지 판매된 매출액을 확인할 수 있다!!!

주의해서 작성할 것.

 

최종정리

 

SELECT PRODUCT.PRODUCT_CODE, SUM(OFFLINE_SALE.SALES_AMOUNT)*PRODUCT.PRICE as SALES

→ 가져올 컬럼을 작성한다. 이때 매출액은 판매가x판매량이므로 이에 해당하는 컬럼을 작성한다.

단 상품코드로 그룹화하였기 때문에 상품코드에 따른 상품판매량을 합산하여 보기 위해 SUM을 쓴다.

 

from PRODUCT 

프로덕트 테이블 가져와

 

join OFFLINE_SALE on PRODUCT.PRODUCT_ID = OFFLINE_SALE.PRODUCT_ID

오프라인 세일 테이블을 합친다. ON 뒤에 겹치는 컬럼 쓰기 잊지 말자.

 

GROUP BY PRODUCT.PRODUCT_CODE

그룹화를 위한 코드

 

order by SALES DESC, PRODUCT_CODE;

  언급하진 않았지만 조건 중에 하나였던 정렬순서!

정렬순서는 2가지 조건이 있었는데

1. 매출액 기준으로 내림차순

2. 매출액이 같다면 상품코드 기준으로 오름차순 이다.

 

정렬을 여러기준 쓰고 싶다면 중간에 콤마만 붙여서 쓰면 된다.

 

ORDER BY 정렬기준1, 정렬기준2, 정렬기준3 ... ;

 

 

이때 내림차순이라면 정렬기준 뒤에 DESC를 붙이면 된다.

내림차순은 반드시 키워드를 작성해야 하며 

오름차순은 ORDER BY 기본조건이라 붙이지 않아도 되지만 

굳이 붙이고 싶다면 ASC 키워드를 쓰면 된다!

+ Recent posts