반응형
문제
다음은 식품의 정보를 담은 FOOD_PRODUCT 테이블과 식품의 주문 정보를 담은 FOOD_ORDER 테이블입니다. FOOD_PRODUCT 테이블은 다음과 같으며 PRODUCT_ID, PRODUCT_NAME, PRODUCT_CD, CATEGORY, PRICE는 식품 ID, 식품 이름, 식품코드, 식품분류, 식품 가격을 의미합니다.
Column name | Type | Nullable |
PRODUCT_ID | VARCHAR(10) | FALSE |
PRODUCT_NAME | VARCHAR(50) | FALSE |
PRODUCT_CD | VARCHAR(10) | TRUE |
CATEGORY | VARCHAR(10) | TRUE |
PRICE | NUMBER | TRUE |
FOOD_ORDER 테이블은 다음과 같으며 ORDER_ID, PRODUCT_ID, AMOUNT, PRODUCE_DATE, IN_DATE, OUT_DATE, FACTORY_ID, WAREHOUSE_ID는 각각 주문 ID, 제품 ID, 주문량, 생산일자, 입고일자, 출고일자, 공장 ID, 창고 ID를 의미합니다
Column name |
Type | Nullable |
ORDER_ID | VARCHAR(10) | FALSE |
PRODUCT_ID | VARCHAR(5) | FALSE |
AMOUNT | NUMBER | FALSE |
PRODUCE_DATE | DATE | TRUE |
IN_DATE | DATE | TRUE |
OUT_DATE | DATE | TRUE |
FACTORY_ID | VARCHAR(10) | FALSE |
WAREHOUSE_ID | VARCHAR(10) | FALSE |
FOOD_PRODUCT와 FOOD_ORDER 테이블에서 생산일자가 2022년 5월인 식품들의 식품 ID, 식품 이름, 총매출을 조회하는 SQL문을 작성해 주세요. 이때 결과는 총매출을 기준으로 내림차순 정렬해 주시고 총매출이 같다면 식품 ID를 기준으로 오름차순 정렬해 주세요.
개념 공부하기
GROUP BY, SUM | GROUP 그룹화 후 SUM 구하기 |
JOIN, INNER JOIN | JOIN : 두 테이블 합치기 |
풀이
문제를 읽으면서 조건들을 분리하며 이해해 본다. FOOD_ORDER 테이블에서 생산일자가 2022-05인 상품들을 추려준 뒤 해당 ID 값의 총매출을 구해달라고 한다.
- 생산일자가 22년 05월인 상품들을 추려준다. 그리고 상품의 총매출을 구하기 위해선 해당 상품의 생산량의 총 합계가 필요하다. 그룹으로 묶어 집계함수 SUM 사용 (빨간 박스)
- 상품 ID 끼리 JOIN을 한 뒤 해당 ID 총 생산량과 PRICE를 서로 곱해 총 매출을 구해준다. (노란 박스)
- TOTAL_SALES 내림차순, 상품 ID 오름차순
-- FOOD ORDER 에서 생산일자 추리고
-- 식품ID, 이름, 총매출
-- 총매출 내림차순, 식품 ID 오름차순
SELECT P.PRODUCT_ID, P.PRODUCT_NAME, P.PRICE * O.AMOUNT AS TOTAL_SALES
FROM FOOD_PRODUCT P
JOIN (
SELECT PRODUCT_ID, SUM(AMOUNT) AS AMOUNT
FROM FOOD_ORDER
WHERE DATE_FORMAT(PRODUCE_DATE, '%Y-%m') = '2022-05'
GROUP BY PRODUCT_ID
) O
ON P.PRODUCT_ID = O.PRODUCT_ID
ORDER BY TOTAL_SALES DESC, P.PRODUCT_ID;
출처 : https://school.programmers.co.kr/learn/courses/30/lessons/131117
반응형
'PS > SQL' 카테고리의 다른 글
프로그래머스 가격이 제일 비싼 식품의 정보 출력하기 SQL(MySQL) (1) | 2023.05.12 |
---|---|
프로그래머스 식품분류별 가장 비싼 식품의 정보 조회하기 SQL(MySQL) (0) | 2023.05.11 |
프로그래머스 서울에 위치한 식당 목록 출력하기 SQL(MySQL) (1) | 2023.05.10 |
프로그래머스 3월에 태어난 여성 회원 목록 출력하기 SQL(MySQL) (0) | 2023.05.10 |
프로그래머스 즐겨찾기가 가장 많은 식당 정보 출력하기 SQL(MySQL) (1) | 2023.05.09 |