본문 바로가기

코딩테스트_SQL

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

[문제]

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

 

[풀이]

1) FOOD_PRODUCT 테이블과 FOOD_ORDER 테이블 PRODUCT_ID를 기준으로 조인

2) 2022년 5월에 생산된 식품들이므로 WHERE절에 조건 추가, 이때 현재 PRODUCE_DATE 타입은 시간까지 나오므로 연도와 월까지만 포맷해 준다.

3) PRODUCT_ID, PRODUCT_NAME, TOTAL_SALES 조회

4) 이때, 총매출 기준은 PRODUCT_ID 또는 PRODUCT_NAME으로 그룹화

5) 총매출 기준으로 내림차순 정렬하되, 총매출이 같으면 PRODUCT_ID 기준으로 오름차순 정렬 

 

[오답 분석하기]

1) 총매출 잘못 계산

SELECT ..
	, SUM(FP.PRICE) ..

** 단순 가격이 아닌 총매출이기 때문에 FOOD_PRODUCT 테이블의 PRICE(가격)과 FOOD_ORDER 테이블의 AMOUNT(주문량)을 곱해야 한다.

=> FP.PRICE * FO.AMOUNT

 

[정답]

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 DATE_FORMAT(FO.PRODUCE_DATE, '%Y-%m')='2022-05'
GROUP BY FP.PRODUCT_ID
ORDER BY 3 DESC, 1;