본문 바로가기

프로그래머스 풀이/Lv 4

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

728x90

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

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

JOIN, GROUP BY를 사용하면 되는 문제.

 

조인을 먼저 하고 그룹바이를 거는 방법도 있고, 그룹화를 먼저 하고 원하는 정보를 걸러낸 후 조인하는 두가지 방법이 있는데 난 두번째 방법을 사용했다.

 

서브쿼리를 사용해야하기 때문에 첫번째 방법이 더 좋은 것 같다.

 


FOOD_ORDER

 

먼저 위 테이블에서 5월에서 출시된 상품들과 그 상품들이 몇개나 주문되었는지 추출하는 쿼리를 작성한다.

 

SELECT PRODUCT_ID, SUM(AMOUNT) AS TOTAL 
    FROM FOOD_ORDER f
    WHERE f.PRODUCE_DATE < TO_DATE('2022-06-01', 'YYYY-MM-DD') 
    AND f.PRODUCE_DATE > TO_DATE('2022-04-30', 'YYYY-MM-DD')
    GROUP BY PRODUCT_ID

 

RESULT:

 

FOOD_PRODUCT

 

이제 위에서 추출한 PRODUCT_ID 를 기준으로 JOIN 하고 가격과 주문량을 곱해 정답을 도출한다. 문제에 주어진대로 정렬하는 것을 잊지말자 두개 이상 기준을 정렬하는 법은 그냥 우선순위대로 적기만 하면 된다.

 

-- 코드를 입력하세요
SELECT p.PRODUCT_ID, p.PRODUCT_NAME, o.TOTAL * p.PRICE AS TOTAL_SALES 
FROM FOOD_PRODUCT p JOIN 
(
    SELECT PRODUCT_ID, SUM(AMOUNT) AS TOTAL 
    FROM FOOD_ORDER f
    WHERE f.PRODUCE_DATE < TO_DATE('2022-06-01', 'YYYY-MM-DD') 
    AND f.PRODUCE_DATE > TO_DATE('2022-04-30', 'YYYY-MM-DD')
    GROUP BY PRODUCT_ID
) o
ON p.PRODUCT_ID = o.PRODUCT_ID
ORDER BY TOTAL_SALES DESC, p.PRODUCT_ID ASC;