꾸물꾸물 졔의 개발공부
[MySQL] 프로그래머스 - 5월 식품들의 총매출 조회하기 (JOIN, DATE, GROUP BY, SUM) 본문
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;
'알고리즘 > SQL' 카테고리의 다른 글
[MySQL] 프로그래머스 - 서울에 위치한 식당 목록 출력하기 (JOIN, GROUP BY, LIKE, ROUND 반올림) (0) | 2023.05.15 |
---|---|
[MySQL] 프로그래머스 - 식품분류별 가장 비싼 식품의 정보 조회하기 (WHERE-IN, SubQuery) (0) | 2023.05.12 |
[MySQL] 프로그래머스 - 보호소에서 중성화한 동물 (JOIN, String, LIKE) (0) | 2023.05.10 |
[MySQL] 프로그래머스 - 없어진 기록 찾기 (OUTER JOIN) (0) | 2023.05.02 |
[MySQL] 프로그래머스 - 대여 횟수가 많은 자동차들의 월별 대여 횟수 구하기 (GROUP BY ~ HAVING , SubQuery) (0) | 2023.05.02 |