상품 별 오프라인 매출 구하기
JOIN
상품 별 오프라인 매출 구하기
문제 설명
다음은 어느 의류 쇼핑몰에서 판매 중인 상품들의 정보를 담은 PRODUCT 테이블과 오프라인 상품 판매 정보를 담은 OFFLINE_SALE 테이블입니다.
PRODUCT 테이블
Column name | Type | Nullable | Description |
---|---|---|---|
PRODUCT_ID | INTEGER | FALSE | 상품 ID |
PRODUCT_CODE | VARCHAR(8) | FALSE | 상품코드 |
PRICE | INTEGER | FALSE | 판매가 (원) |
상품 코드는 8자리이며, 앞 2자리는 카테고리 코드를 의미합니다.
OFFLINE_SALE 테이블
Column name | Type | Nullable | Description |
---|---|---|---|
OFFLINE_SALE_ID | INTEGER | FALSE | 오프라인 판매 ID |
PRODUCT_ID | INTEGER | FALSE | 상품 ID |
SALES_AMOUNT | INTEGER | FALSE | 판매량 |
SALES_DATE | DATE | FALSE | 판매일 |
동일한 날짜, 상품 ID 조합에 대해서는 하나의 판매 데이터만 존재합니다.
문제
PRODUCT 테이블과 OFFLINE_SALE 테이블에서 상품코드 별 매출액(판매가 * 판매량) 합계를 출력하는 SQL문을 작성해주세요. 결과는 매출액을 기준으로 내림차순 정렬해주시고 매출액이 같다면 상품코드를 기준으로 오름차순 정렬해주세요.
풀이 과정
- 조건 확인
- 매출액은 판매가 × 판매량으로 계산
- 각 상품의 매출액을 계산하려면, 두 테이블을
PRODUCT_ID
를 기준으로 결합해야겠군
- 테이블 결합
- 두 테이블을
PRODUCT_ID
기준으로 INNER JOIN - INNER JOIN 사용 이유 : 판매 데이터가 있는 상품만 필요한 경우이기 때문.
- 두 테이블을
- 매출액 계산
- 결합된 결과에서 상품별 총 판매량을 SUM 해서 구한 후에 구한 후 매출액 계산하자. =>
SUM(PRICE
*SALES_AMOUNT
)
- 결합된 결과에서 상품별 총 판매량을 SUM 해서 구한 후에 구한 후 매출액 계산하자. =>
- 그룹화
- GROUP BY
PRODUCT_CODE
를 사용하여 각 상품 코드별로 데이터 집계
- GROUP BY
- 결과 정렬
- 정렬 기준에 따라 ORDER BY로 결과 정렬
- 매출액을 기준으로 내림차순 정렬하고, 매출액이 같은 경우 상품 코드를 기준으로 오름차순 정렬
- 정렬 기준에 따라 ORDER BY로 결과 정렬
- 최종 출력
- SELECT 절에서
PRODUCT_CODE
와 총 매출액 출력
- SELECT 절에서
- 교훈
- JOIN 시에 불필요한 데이터를 포함시키지 않기 위해서.. 필요한 테이블과 조건만 명확하게 설정하는 것… 숙지..
정답
1
2
3
4
5
6
7
8
9
10
11
12
13
14
SELECT
P.PRODUCT_CODE,
SUM(P.PRICE * S.SALES_AMOUNT) AS SALES
FROM
PRODUCT P
JOIN
OFFLINE_SALE S
ON
P.PRODUCT_ID = S.PRODUCT_ID
GROUP BY
P.PRODUCT_CODE
ORDER BY
SALES DESC,
P.PRODUCT_CODE ASC;
Tip
- 각 상품 코드별로 데이터를 집계하기 위해 GROUP BY 사용
- 매출액 계산
- 매출액 = 판매가 × 판매량
- SUM(
PRICE
*SALES_AMOUNT
)을 사용하여 각 상품 코드별 총 매출액 계산
SQL Dialect Used: Oracle
개념 확인
- INNER JOIN
- 두 테이블의 공통된 컬럼을 기준으로 데이터를 연결
- 양쪽 테이블 모두에 일치하는 행만 결과에 포함됨
- GROUP 함수
- 특정 컬럼 값을 기준으로 데이터를 그룹화하여 집계 계산 수행
- SUM은 여러 행의 값을 더하여 합계를 계산할 때 사용. GROUP BY와 함께 사용하여 특정 그룹별로 합계를 구할 수 있음
Useful link
This post is licensed under Park Juyoung by the author.