Post

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

JOIN

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


문제 설명

다음은 어느 의류 쇼핑몰에서 판매 중인 상품들의 정보를 담은 PRODUCT 테이블과 오프라인 상품 판매 정보를 담은 OFFLINE_SALE 테이블입니다.


PRODUCT 테이블

Column nameTypeNullableDescription
PRODUCT_IDINTEGERFALSE상품 ID
PRODUCT_CODEVARCHAR(8)FALSE상품코드
PRICEINTEGERFALSE판매가 (원)

상품 코드는 8자리이며, 앞 2자리는 카테고리 코드를 의미합니다.


OFFLINE_SALE 테이블

Column nameTypeNullableDescription
OFFLINE_SALE_IDINTEGERFALSE오프라인 판매 ID
PRODUCT_IDINTEGERFALSE상품 ID
SALES_AMOUNTINTEGERFALSE판매량
SALES_DATEDATEFALSE판매일

동일한 날짜, 상품 ID 조합에 대해서는 하나의 판매 데이터만 존재합니다.




문제

PRODUCT 테이블과 OFFLINE_SALE 테이블에서 상품코드 별 매출액(판매가 * 판매량) 합계를 출력하는 SQL문을 작성해주세요. 결과는 매출액을 기준으로 내림차순 정렬해주시고 매출액이 같다면 상품코드를 기준으로 오름차순 정렬해주세요.




풀이 과정
  1. 조건 확인
    • 매출액은 판매가 × 판매량으로 계산
    • 각 상품의 매출액을 계산하려면, 두 테이블을 PRODUCT_ID를 기준으로 결합해야겠군
  2. 테이블 결합
    • 두 테이블을 PRODUCT_ID 기준으로 INNER JOIN
    • INNER JOIN 사용 이유 : 판매 데이터가 있는 상품만 필요한 경우이기 때문.
  3. 매출액 계산
    • 결합된 결과에서 상품별 총 판매량을 SUM 해서 구한 후에 구한 후 매출액 계산하자. => SUM(PRICE * SALES_AMOUNT)
  4. 그룹화
    • GROUP BY PRODUCT_CODE를 사용하여 각 상품 코드별로 데이터 집계
  5. 결과 정렬
    • 정렬 기준에 따라 ORDER BY로 결과 정렬
      • 매출액을 기준으로 내림차순 정렬하고, 매출액이 같은 경우 상품 코드를 기준으로 오름차순 정렬
  6. 최종 출력
    • SELECT 절에서 PRODUCT_CODE총 매출액 출력
  • 교훈
    • 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

  1. 각 상품 코드별로 데이터를 집계하기 위해 GROUP BY 사용
  2. 매출액 계산
    • 매출액 = 판매가 × 판매량
  3. SUM(PRICE * SALES_AMOUNT)을 사용하여 각 상품 코드별 총 매출액 계산

SQL Dialect Used: Oracle




개념 확인

  • INNER JOIN
    • 두 테이블의 공통된 컬럼을 기준으로 데이터를 연결
    • 양쪽 테이블 모두에 일치하는 행만 결과에 포함됨
  • GROUP 함수
    • 특정 컬럼 값을 기준으로 데이터를 그룹화하여 집계 계산 수행
      • SUM은 여러 행의 값을 더하여 합계를 계산할 때 사용. GROUP BY와 함께 사용하여 특정 그룹별로 합계를 구할 수 있음




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

This post is licensed under Park Juyoung by the author.

Trending Tags