728x90
https://school.programmers.co.kr/learn/courses/30/lessons/131117
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;
'프로그래머스 풀이 > Lv 4' 카테고리의 다른 글
[프로그래머스 SQL] 식품분류별 가장 비싼 식품의 정보 조회하기 (0) | 2024.11.29 |
---|---|
프로그래머스 - [3차]자동완성 (C++) (0) | 2023.02.24 |