꾸물꾸물 졔의 개발공부

[MySQL] 프로그래머스 - 5월 식품들의 총매출 조회하기 (JOIN, DATE, GROUP BY, SUM) 본문

알고리즘/SQL

[MySQL] 프로그래머스 - 5월 식품들의 총매출 조회하기 (JOIN, DATE, GROUP BY, SUM)

체제 2023. 5. 11. 20:43

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

  • FOOD_PRODUCT : 식품의 정보를 담은 테이블 
  • FOOD_ORDER : 식품의 주문 정보를 담은 테이블 

 

문제

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


 

구현 과정

  • FOOD_PRODUCT와 FOOD_ORDER 테이블에서 생산일자가 2022년 5월인 식품 찾기 
  • 식품별 총 매출 계산 

 

1️⃣ FOOD_PRODUCT와 FOOD_ORDER 테이블 조인하여 생산일자가 2022년 5월인 식품 찾기 

1) 식품ID, 식품 이름, 총매출을 위한 주문량과 가격이 두개의 테이블에 나뉘어 있기 때문에 두 테이블을 조인한다. 두 테이블 모두 가지고 있는 컬럼인 PRODUCT_ID를 기준으로 하여 JOIN, 내부 조인 

SELECT * 
FROM FOOD_PRODUCT P JOIN FOOD_ORDER O
ON P.PRODUCT_ID = O.PRODUCT_ID

 

2) 조인한 테이블에서 생산일자, FOOD_ORDER 테이블의 PRODUCT_DATE 컬럼 값이 '2022-05-OO' 인 식품을 찾기 위해 DATE_FORMAT 함수를 사용하여 '년-월' 값만 추출한다. DATE_FORMAT(생산일자, "%Y-%m") = '2022-05" 

SELECT *
FROM FOOD_PRODUCT P JOIN FOOD_ORDER O
ON P.PRODUCT_ID = O.PRODUCT_ID 
WHERE DATE_FORMAT(O.PRODUCE_DATE, "%Y-%m") = '2022-05'

 

 

2️⃣ 식품별 총 매출 계산 

2022년 5월에 생산된 식품을 찾았다면, 식품별로 총 매출을 계산한다. 식품별로 주문량의 합을 구하기 위해 식품ID 별로 그룹화 하고, 집계함수 SUM을 사용하여 (식품별)주문량의 총합을 구한다. 이후, 주문량의 총합과 식품의 가격을 곱하여 총 매출을 구할 수 있다. 

  • FOOD_ORDER 테이블의 AMOUNT 컬럼 : 식품의 주문량 
  • FOOD_PRODUCT 테이블의 PRICE 컬럼 : 식품 가격 
SELECT SUM(O.AMOUNT)*P.PRICE AS TOTAL_SALES
FROM FOOD_PRODUCT P JOIN FOOD_ORDER O
ON P.PRODUCT_ID = O.PRODUCT_ID 
WHERE DATE_FORMAT(O.PRODUCE_DATE, "%Y-%m") = '2022-05' 
GROUP BY O.PRODUCT_ID

 

💡2개 이상의 정렬 조건은 ORDER BY 절에 콤마(,) 로 구분하여 나열 


 

✔️코드

SELECT P.PRODUCT_ID, P.PRODUCT_NAME, SUM(O.AMOUNT)*P.PRICE AS TOTAL_SALES
FROM FOOD_PRODUCT P JOIN FOOD_ORDER O
ON P.PRODUCT_ID = O.PRODUCT_ID 
WHERE DATE_FORMAT(O.PRODUCE_DATE, "%Y-%m") = '2022-05' 
GROUP BY O.PRODUCT_ID
ORDER BY TOTAL_SALES DESC, P.PRODUCT_ID;