알고리즘 공부/SQL

[L4] 프로그래머스 ORACLE 5월 식품들의 총매출 조회하기

마달랭 2024. 10. 18. 17:25
반응형

테이블 정보

1. FOOD_PRODUCT 

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

 

 

2. FOOD_ORDER 

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

 

예시 테이블

1. 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

 

 

2. 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

 

3. 출력 기대값

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

 

문제

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

 

 

아이디어

  1. 생산일자가 2022년 5월인 식품의 PRODUCT_ID별 판매량을 알아야 한다.
  2. PRODUCT_ID을 기준으로 GROUP BY 하여 생산년월이 2022-05인 상품들의 주문 개수를 구해준다.
  3. 해당 출력값을 서브쿼리로 하여 FOOD_PRODUCT와 INNER JOIN 해준다.
  4. PRICE와 주문 개수 AMOUNT를 곱하여 TOTAL_SALES별칭으로 출력한다.
  5. 정렬은 총매출을 기준으로 내림차순, 총매출이 같다면 식품 ID를 기준으로 오름차순 정렬이다.

 

정답

-- 코드를 입력하세요
SELECT A.PRODUCT_ID, A.PRODUCT_NAME, A.PRICE * B.AMOUNT AS TOTAL_SALES
FROM FOOD_PRODUCT A
INNER JOIN (
    SELECT PRODUCT_ID, SUM(AMOUNT) AS AMOUNT
    FROM FOOD_ORDER 
    WHERE TO_CHAR(PRODUCE_DATE, 'YYYYMM') = '202205'
    GROUP BY PRODUCT_ID
) B
ON A.PRODUCT_ID = B.PRODUCT_ID
ORDER BY 3 DESC, 1

 

 

참고사항

없음

 

 

728x90
반응형