
문제 설명
다음은 식품의 정보를 담은 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 |
문제 풀이
SELECT
FP.PRODUCT_ID,
FP.PRODUCT_NAME,
SUM(FP.PRICE * FO.AMOUNT) AS TOTAL_SALES
FROM
FOOD_PRODUCT FP
JOIN
FOOD_ORDER FO ON FP.PRODUCT_ID = FO.PRODUCT_ID
WHERE
MONTH(FO.PRODUCE_DATE) = 5 AND YEAR(FO.PRODUCE_DATE) = 2022
GROUP BY
FP.PRODUCT_ID, FP.PRODUCT_NAME
HAVING
TOTAL_SALES > 0
ORDER BY
TOTAL_SALES DESC, FP.PRODUCT_ID ASC;
- FROM 절: 두 개의 테이블, FOOD_PRODUCT와 FOOD_ORDER를 사용합니다.
- JOIN: FOOD_PRODUCT 테이블의 PRODUCT_ID 컬럼을 기반으로 FOOD_ORDER 테이블과 조인합니다. 이렇게 함으로써 제품에 관련된 주문 정보를 가져올 수 있습니다.
- WHERE 절: 이 절은 FOOD_ORDER 테이블의 PRODUCE_DATE 컬럼을 기준으로 2022년 5월에 해당하는 레코드만 선택하도록 필터링합니다.
- SELECT 절:
- FP.PRODUCT_ID: 제품 ID를 선택합니다.
- FP.PRODUCT_NAME: 제품 이름을 선택합니다.
- SUM(FP.PRICE * FO.AMOUNT) AS TOTAL_SALES: 각 제품의 총 판매 금액을 계산합니다. 이는 제품의 가격(PRICE)와 주문 수량(AMOUNT)을 곱한 후 합계를 구하여 TOTAL_SALES라는 이름으로 결과에 표시합니다.
- GROUP BY 절: 결과를 FP.PRODUCT_ID와 FP.PRODUCT_NAME으로 그룹화합니다. 이렇게 함으로써 각 제품에 대한 총 판매 금액을 계산할 수 있습니다.
- HAVING 절: TOTAL_SALES 값이 0보다 큰 레코드만 선택합니다. 즉, 판매 금액이 0인 제품은 결과에서 제외됩니다.
- ORDER BY 절: 레코드를 TOTAL_SALES의 내림차순으로 정렬하되, 만약 TOTAL_SALES 값이 동일하다면 FP.PRODUCT_ID의 오름차순으로 정렬합니다.
'SQL > SQL 테스트 연습' 카테고리의 다른 글
프로그래머스 Lv4. 년, 월, 성별 별 상품 구매 회원 수 구하기 (0) | 2023.08.16 |
---|---|
프로그래머스 Lv4. 서울에 위치한 식당 목록 출력하기 (0) | 2023.08.16 |
프로그래머스 Lv4. 식품분류별 가장 비싼 식품의 정보 조회하기 (0) | 2023.08.16 |
프로그래머스 Lv4. 보호소에서 중성화한 동물 (0) | 2023.08.16 |
프로그래머스 Lv3. 대여 횟수가 많은 자동차들의 월별 대여 횟수 구하기 (0) | 2023.08.16 |