Post

5월 식품들의 총매출 조회하기

JOIN

5월 식품들의 총매출 조회하기


문제 설명

다음은 식품의 정보를 담은 FOOD_PRODUCT 테이블과 식품의 주문 정보를 담은 FOOD_ORDER 테이블입니다.


FOOD_PRODUCT 테이블

Column nameTypeNullableDescription
PRODUCT_IDVARCHAR(10)FALSE식품 ID
PRODUCT_NAMEVARCHAR(50)FALSE식품 이름
PRODUCT_CDVARCHAR(10)TRUE식품 코드
CATEGORYVARCHAR(10)TRUE식품 분류
PRICENUMBERTRUE식품 가격


FOOD_ORDER 테이블

Column nameTypeNullableDescription
ORDER_IDVARCHAR(10)FALSE주문 ID
PRODUCT_IDVARCHAR(5)FALSE제품 ID
AMOUNTNUMBERFALSE주문량
PRODUCE_DATEDATETRUE생산 일자
IN_DATEDATETRUE입고 일자
OUT_DATEDATETRUE출고 일자
FACTORY_IDVARCHAR(10)FALSE공장 ID
WAREHOUSE_IDVARCHAR(10)FALSE창고 ID




문제

FOOD_PRODUCT와 FOOD_ORDER 테이블에서 생산일자가 2022년 5월인 식품들의 식품 ID, 식품 이름, 총매출을 조회하는 SQL문을 작성해주세요. 이때 결과는 총매출을 기준으로 내림차순 정렬해주시고 총매출이 같다면 식품 ID를 기준으로 오름차순 정렬해주세요.




풀이 과정
  1. 조건 확인
    • 생산일자가 2022년 5월인 제품을 필터링해야함
      TO_CHAR(PRODUCE_DATE, ‘YYYY-MM’) = ‘2022-05’
    • 총 매출(TOTAL_SALES) = 주문량 * 가격 구하기
  2. 테이블 결합 (JOIN)
    • ANIMAL_OUTS 테이블 기준으로 INNSER JOIN 사용해야겠군
    • LEFT JOIN 선택 이유: 주문 정보가 없는 제품은 결과에서 제외해야 하므로 INNER JOIN이 적합
  3. 총매출 계산
    • SUM(AMOUNT * PRICE)를 통해 총매출 계산
      결과를 제품별로 집계하기 위해 GROUP BY를 사용
  4. 결과 정렬하기
    • 정렬 기준에 따라 ORDER BY로 결과 정렬
      • 총매출(TOTAL_SALES)을 기준 내림차순 정렬
      • 총매출이 같다면 PRODUCT_ID를 기준 오름차순 정렬
  5. 최종 결과 출력
    • 최종적으로 식품 ID(PRODUCT_ID), 식품 이름(PRODUCT_NAME), 총매출(TOTAL_SALES)만 출력
  • 교훈
    • INNSER JOIN = JOIN (ON 컬럼명 을 기준값으로 동일한 ROW들만 출력됨)
    • 프로젝트 했던 회사에서는 오라클에서 제공하는 전통적인 조인 방식으로 (+) 연산자를 사용해왔는데,
      ANSI 표준이 아니며, 다른 DBMS에서는 지원하지 않기 때문에 방법을 바꿔보도록 하려고 한다. 익숙해지자.. + 줄맞춤도..




정답

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
SELECT 
    FP.PRODUCT_ID, 
    FP.PRODUCT_NAME, 
    SUM(FO.AMOUNT * FP.PRICE) AS TOTAL_SALES
FROM 
    FOOD_PRODUCT FP
JOIN 
    FOOD_ORDER FO 
ON 
    FP.PRODUCT_ID = FO.PRODUCT_ID
WHERE 
    TO_CHAR(FO.PRODUCE_DATE, 'YYYY-MM') = '2022-05'
GROUP BY 
    FP.PRODUCT_ID, FP.PRODUCT_NAME
ORDER BY 
    TOTAL_SALES DESC, 
    FP.PRODUCT_ID ASC;


Tip

  1. 생산일자가 2022년 5월인 제품 필터링
    • TO_CHAR(PRODUCE_DATE, ‘YYYY-MM’) = ‘2022-05’: PRODUCE_DATE를 연도와 월로 변환하여 2022년 5월을 선택
  2. 총매출 계산
    • SUM(FO.AMOUNT * FP.PRICE): 주문량(AMOUNT)과 가격(PRICE)을 곱하여 총매출을 계산
    • 특정 컬럼 값들의 총합을 구하는 데 SUM을 사용. AMOUNTPRICE를 곱한 값을 SUM으로 집계하면, 각 제품의 총매출 계산이 가능

SQL Dialect Used: Oracle




개념 확인

  • BETWEEN 연산자
    • 해당 범위 내의 데이터를 필터링
    • WHERE 컬럼명 BETWEEN 500000 AND 1999999
  • GROUP 함수
    • 특정 컬럼 값을 기준으로 데이터를 그룹화하여 집계 계산 수행
    • SUM, AVG, COUNT, MAX, MIN, STDDEV, VARIANCE, GROUPING, MEDIAN 등
  • INNER JOIN (=JOIN)
    • 두 테이블 간의 공통된 키를 기준으로 데이터를 결합
  • TO_CHAR 함수
    • 날짜나 숫자 데이터를 원하는 형식으로 문자열로 변환
      TO_CHAR(PRODUCE_DATE, ‘YYYY-MM’) → 날짜를 “YYYY-MM” 형식으로 변환




5월 식품들의 총매출 조회하기

This post is licensed under Park Juyoung by the author.

Trending Tags