[문제]
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;
'코딩테스트_SQL' 카테고리의 다른 글
250424 프로그래머스 주문량이 많은 아이스크림들 조회하기 (0) | 2025.04.24 |
---|---|
250423 프로그래머스 서울에 위치한 식당 목록 출력하기 (0) | 2025.04.24 |
250410 프로그래머스 조건별로 분류하여 주문상태 출력하기 (0) | 2025.04.10 |
250408 프로그래머스 없어진 기록 찾기 (0) | 2025.04.09 |
250406 프로그래머스 자동차 대여 기록에서 대여중 / 대여 가능 여부 구분하기 (0) | 2025.04.06 |