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

2024. 9. 15. 18:00SQL 고득점 Kit/JOIN

https://school.programmers.co.kr/learn/courses/30/lessons/131117

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr


문제 설명
다음은 식품의 정보를 담은 FOOD_PRODUCT 테이블과 식품의 주문 정보를 담은 FOOD_ORDER 테이블입니다. FOOD_PRODUCT 테이블은 다음과 같으며 PRODUCT_IDPRODUCT_NAMEPRODUCT_CDCATEGORYPRICE는 식품 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

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


예시
FOOD_PRODUCT 테이블이 다음과 같고

PRODUCT_ID PRODUCT_NAME PRODUCT_CD CATEGORY PRICE
P0011 맛있는콩기름 CD_OL00001 식용유 4880
P0012 맛있는올리브유 CD_OL00002 식용유 7200
P0013 맛있는포도씨유 CD_OL00003 식용유 5950
P0014 맛있는마조유 CD_OL00004 식용유 8950
P0015 맛있는화조유 CD_OL00005 식용유 8800
P0016 맛있는참기름 CD_OL00006 식용유 7100
P0017 맛있는들기름 CD_OL00007 식용유 7900
P0018 맛있는고추기름 CD_OL00008 식용유 6100
P0019 맛있는카놀라유 CD_OL00009 식용유 5100
P0020 맛있는산초유 CD_OL00010 식용유 6500


FOOD_ORDER 테이블이 다음과 같을 때

ORDER
_ID
PRODUCT
_ID
AMOUNT PRODUCE_DATE IN_DATE OUT_DATE FACTORY
_ID
WAREHOUSE
_ID
OD00000056 P0012 1000 2022-04-04  2022-04-21  2022-04-25  FT19980002  WH0032
OD00000057 P0014 2500 2022-04-14  2022-04-27  2022-05-01  FT19980002 WH0033
OD00000058 P0017 1200 2022-05-19  2022-05-28  2022-05-28  FT20070002  WH0033
OD00000059 P0017 1000 2022-05-24  2022-05-30  2022-05-30  FT20070002  WH0038
OD00000060 P0019 2000 2022-05-29  2022-06-08  2022-06-08  FT20070002  WH0035


SQL을 실행하면 다음과 같이 출력되어야 합니다.

PRODUCT_ID PRODUCT_NAME TOTAL_SALES
P0017 맛있는들기름 17380000
P0019 맛있는카놀라유 10200000

생산일자가 2022년 5월인 식품들의 식품 ID, 식품 이름, 총매출을 조회하는 문제입니다.

 

두 개의 테이블 FOOD_PRODUCT와 FOOD_ORDER는 식품 ID PRODUCT_ID을 기준으로 조인을 실행할 수 있습니다.

해당 테이블들을 조인한 뒤, 생산일자가 2022년 5월인 값들을 추출한 뒤 그룹화하여 총매출을 구하겠습니다.

 

총매출의 공식은 다음과 같습니다.

총매출 = 총 판매량 * 가격

 

정답 코드를 작성해보겠습니다.

  SELECT P.PRODUCT_ID, P.PRODUCT_NAME, SUM(O.AMOUNT) * P.PRICE AS TOTAL_SALES
    FROM FOOD_PRODUCT P
         INNER JOIN
         FOOD_ORDER O
         ON P.PRODUCT_ID = O.PRODUCT_ID
   WHERE YEAR(PRODUCE_DATE) = 2022
         AND MONTH(PRODUCE_DATE) = 5
GROUP BY PRODUCT_ID
ORDER BY 3 DESC, 1 ASC;

 

테이블들을 식품 ID를 기준으로 조인한 뒤, WHERE 조건절을 사용해 2022년 5월에 생산된 제품들만을 추렸습니다.

이후 GROUP BY로 식품 ID를 그룹으로 묶고, 해당 그룹의 총 판매량을 SUM(O.AMOUNT)를 사용해 구했습니다.

총매출은 해당 총 판매량에 가격을 곱해주시면 구할 수 있습니다.

마지막으로 총매출을 기준으로 내림차순, 식품 ID를 기준으로 오름차순 정렬하면 문제를 풀 수 있습니다.

 

이전에 풀었던 문제와 동일한 레벨 4인데, 난이도가 천차만별이네요.

레벨 4치고는 쉬운 문제였습니다.