본문 바로가기

SQL Kit/JOIN

상품 별 오프라인 매출 구하기 [ 프로그래머스 | SQL Kit | Level 2 ]

1. 문제목적

테이블 간 조인을 통해 데이터를 결합하고 집계 연산(SUM)과 그룹화(GROUP BY)를 통해 특정 기준에 따른 데이터를 요약하는 방법을 학습하는 것이다.


2. 핵심개념

JOIN

  • 정의: 두 개 이상의 테이블을 공통된 컬럼을 기준으로 결합하는 연산.
SELECT table1.column1, table2.column2
FROM table1
JOIN table2
ON table1.common_column = table2.common_column;
  • 특징: INNER JOIN은 공통 키를 기준으로 양쪽 테이블에 공통된 데이터만 반환.

SUM

  • 정의: 특정 컬럼 값의 총합을 계산하는 집계 함수.
SELECT SUM(column)
FROM table;

GROUP BY

  • 정의: 특정 컬럼을 기준으로 데이터를 그룹화하여 집계 연산을 수행.
SELECT column, SUM(value)
FROM table
GROUP BY column;

ORDER BY

  • 정의: 데이터를 특정 컬럼을 기준으로 정렬.
SELECT * FROM table
ORDER BY column1 ASC, column2 DESC;

3. 문제해결 절차

  1. 데이터 분석
    • PRODUCT 테이블에는 상품 정보(상품 코드, 가격, 상품 ID)가 있다.
    • OFFLINE_SALE 테이블에는 판매 기록(판매량, 판매 날짜, 상품 ID)이 있다.
  2. 조인 조건 설정
    • PRODUCT_ID를 기준으로 PRODUCT 테이블과 OFFLINE_SALE 테이블을 결합.
  3. 매출 계산
    • 매출 = PRICE * SALES_AMOUNT.
  4. 그룹화 및 집계
    • 상품 코드(PRODUCT_CODE)를 기준으로 그룹화하여 총 매출을 계산.
  5. 정렬 조건 설정
    • 매출액을 기준으로 내림차순 정렬하고, 동일 매출액인 경우 상품 코드를 기준으로 오름차순 정렬.

4. 코드작성

sql
복사편집
-- 상품별 총 매출을 계산하고 정렬
SELECT
    P.PRODUCT_CODE,                        -- 상품 코드
    SUM(P.PRICE * O.SALES_AMOUNT) AS SALES -- 총 매출액: 가격 * 판매량의 합계
FROM
    PRODUCT AS P                           -- PRODUCT 테이블을 P로 별칭 지정
JOIN
    OFFLINE_SALE AS O                      -- OFFLINE_SALE 테이블을 O로 별칭 지정
ON
    P.PRODUCT_ID = O.PRODUCT_ID            -- 두 테이블을 PRODUCT_ID 기준으로 조인
GROUP BY
    P.PRODUCT_CODE                         -- 상품 코드별로 그룹화
ORDER BY
    SALES DESC,                            -- 매출액 기준 내림차순 정렬
    P.PRODUCT_CODE ASC;                    -- 동일 매출액인 경우 상품 코드 기준 오름차순 정렬


5. 코드분석

SELECT

  • P.PRODUCT_CODE: 상품 코드를 결과에 출력.
  • SUM(P.PRICE * O.SALES_AMOUNT): 상품의 가격과 판매량을 곱하여 매출을 계산한 후, 총합을 반환. 별칭 SALES로 지정.

FROM과 JOIN

  • PRODUCT AS P: 상품 정보를 포함한 테이블.
  • OFFLINE_SALE AS O: 판매 정보를 포함한 테이블.
  • ON P.PRODUCT_ID = O.PRODUCT_ID: 두 테이블을 PRODUCT_ID를 기준으로 조인하여 데이터를 결합.

GROUP BY

  • P.PRODUCT_CODE: 상품 코드별로 데이터를 그룹화하여 매출을 집계.

ORDER BY

  • SALES DESC: 매출액을 기준으로 내림차순 정렬.
  • P.PRODUCT_CODE ASC: 동일 매출액일 경우 상품 코드를 기준으로 오름차순 정렬.