프로그래머스 Lv4. 5월 식품들의 총매출 조회하기

2023. 8. 16. 11:30SQL/SQL 테스트 연습

 

문제 설명

다음은 식품의 정보를 담은 FOOD_PRODUCT 테이블과 식품의 주문 정보를 담은 FOOD_ORDER 테이블입니다. FOOD_PRODUCT 테이블은 다음과 같으며  PRODUCT_ID, PRODUCT_NAME, PRODUCT_CD, CATEGORY, PRICE는 식품 ID, 식품 이름, 식품코드, 식품분류, 식품 가격을 의미합니다.

 

Column name Type Nullable
PRODUCT_ID VARCHAR(10) FALSE
PRODUCT_NAME VARCHAR(50) FALSE
PRODUCT_CD VARCHAR(10) TRUE
CATEGORY VARCHAR(10) TRUE
PRICE NUMBER TRUE

 

FOOD_ORDER 테이블은 다음과 같으며 ORDER_ID,  PRODUCT_ID, AMOUNT, PRODUCE_DATE, IN_DATE, OUT_DATE, FACTORY_ID, WAREHOUSE_ID는 각각 주문 ID, 제품 ID, 주문량, 생산일자, 입고일자, 출고일자, 공장 ID, 창고 ID를 의미합니다.

 

Column name Type Nullable
ORDER_ID VARCHAR(10) FALSE
PRODUCT_ID VARCHAR(5) FALSE
AMOUNT NUMBER FALSE
PRODUCE_DATE DATE TRUE
IN_DATE DATE TRUE
OUT_DATE DATE TRUE
FACTORY_ID VARCHAR(10) FALSE
WAREHOUSE_ID VARCHAR(10) FALSE

 

문제 풀이
SELECT
    FP.PRODUCT_ID,
    FP.PRODUCT_NAME,
    SUM(FP.PRICE * FO.AMOUNT) AS TOTAL_SALES
FROM
    FOOD_PRODUCT FP
JOIN
    FOOD_ORDER FO ON FP.PRODUCT_ID = FO.PRODUCT_ID
WHERE
    MONTH(FO.PRODUCE_DATE) = 5 AND YEAR(FO.PRODUCE_DATE) = 2022
GROUP BY
    FP.PRODUCT_ID, FP.PRODUCT_NAME
HAVING
    TOTAL_SALES > 0
ORDER BY
    TOTAL_SALES DESC, FP.PRODUCT_ID ASC;
  • FROM 절: 두 개의 테이블, FOOD_PRODUCT와 FOOD_ORDER를 사용합니다.
  • JOIN: FOOD_PRODUCT 테이블의 PRODUCT_ID 컬럼을 기반으로 FOOD_ORDER 테이블과 조인합니다. 이렇게 함으로써 제품에 관련된 주문 정보를 가져올 수 있습니다.
  • WHERE 절: 이 절은 FOOD_ORDER 테이블의 PRODUCE_DATE 컬럼을 기준으로 2022년 5월에 해당하는 레코드만 선택하도록 필터링합니다.
  • SELECT 절:
    • FP.PRODUCT_ID: 제품 ID를 선택합니다.
    • FP.PRODUCT_NAME: 제품 이름을 선택합니다.
    • SUM(FP.PRICE * FO.AMOUNT) AS TOTAL_SALES: 각 제품의 총 판매 금액을 계산합니다. 이는 제품의 가격(PRICE)와 주문 수량(AMOUNT)을 곱한 후 합계를 구하여 TOTAL_SALES라는 이름으로 결과에 표시합니다.
  • GROUP BY 절: 결과를 FP.PRODUCT_ID와 FP.PRODUCT_NAME으로 그룹화합니다. 이렇게 함으로써 각 제품에 대한 총 판매 금액을 계산할 수 있습니다.
  • HAVING 절: TOTAL_SALES 값이 0보다 큰 레코드만 선택합니다. 즉, 판매 금액이 0인 제품은 결과에서 제외됩니다.
  • ORDER BY : 레코드를 TOTAL_SALES의 내림차순으로 정렬하되, 만약 TOTAL_SALES 값이 동일하다면 FP.PRODUCT_ID의 오름차순으로 정렬합니다.