[MySQL/레벨4] 5월 식품들의 총매출 조회하기

셔노·2023년 1월 8일
0

코딩테스트 MySQL

목록 보기
1/7

📝 문제

문제설명

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

Column nameTypeNullable
PRODUCT_IDVARCHAR(10)FALSE
PRODUCT_NAMEVARCHAR(50)FALSE
PRODUCT_CDVARCHAR(10)TRUE
CATEGORYVARCHAR(10)TRUE
PRICENUMBERTRUE

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

Column nameTypeNullable
ORDER_IDVARCHAR(10)FALSE
PRODUCT_IDVARCHAR(5)FALSE
AMOUNTNUMBER FALSE
PRODUCE_DATEDATETRUE
IN_DATEDATETRUE
OUT_DATEDATETRUE
FACTORY_IDVARCHAR(10)FALSE
WAREHOUSE_IDVARCHAR(10)FALSE

문제

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

예시

FOOD_PRODUCT 테이블이 다음과 같고

PRODUCT_IDPRODUCT_NAMEPRODUCT_CDCATEGORYPRICE
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_IDPRODUCT_IDAMOUNTPRODUCE_DATEIN_DATEOUT_DATEFACTORY_IDWAREHOUSE_ID
OD00000056P001210002022-04-042022-04-212022-04-25FT19980002WH0032
OD00000057P001425002022-04-142022-04-272022-05-01FT19980002WH0033
OD00000058P001712002022-05-192022-05-282022-05-28FT20070002WH0033
OD00000059P001710002022-05-242022-05-302022-05-30FT20070002WH0038
OD00000060P001920002022-05-292022-06-082022-06-08FT20070002WH0035

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

PRODUCT_IDPRODUCT_NAMETOTAL_SALES
P0017맛있는들기름17380000
P0019맛있는카놀라유10200000

💡나의 풀이

나의 풀이 결과: 정답입니다! 🤓

두개 테이블을 INNER JOIN 과 GROUP BY 를 활용하여 풀이 했습니다.

SELECT FOOD_ORDER.PRODUCT_ID, FOOD_PRODUCT.PRODUCT_NAME, SUM(PRICE*AMOUNT) AS TOTAL_SALES FROM FOOD_ORDER
INNER JOIN FOOD_PRODUCT ON FOOD_PRODUCT.PRODUCT_ID = FOOD_ORDER.PRODUCT_ID
WHERE FOOD_ORDER.PRODUCE_DATE LIKE '2022-05%'
GROUP BY FOOD_ORDER.PRODUCT_ID
ORDER BY TOTAL_SALES DESC, FOOD_ORDER.PRODUCT_ID
  • INNER JOIN으로 테이블 FOOD_PRODUCT 과 테이블 FOOD_ORDERPRODUCT_ID로 묶어줍니다.
  • WHERE / LIKE 로 PRODUCE_DATE 를 '2022-05%' 로 필터합니다.
  • GROUP BY 로 PRODUCT_ID 기준으로 묶습니다.
  • SUM 으로 각 묶인 값들끼리 PRICEAMOUNT 를 곱한 값을 합산합니다.
  • TOTAL_SALES로 내림차순(DESC) / PRODUCT_ID 기준으로 정렬합니다.
profile
초보개발자

0개의 댓글