반응형
테이블 정보
1. FOOD_PRODUCT
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 |
2. FOOD_ORDER
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 |
예시 테이블
1. FOOD_PRODUCT
PRODUCT_ID | PRODUCT_NAME | PRODUCT_CD | CATEGORY | PRICE |
P0011 | 맛있는콩기름 | CD_OL00001 | 식용유 | 4880 |
P0012 | 맛있는올리브유 | CD_OL00002 | 식용유 | 7200 |
P0013 | 맛있는포도씨유 | CD_OL00003 | 식용유 | 5950 |
P0014 | 맛있는마조유 | CD_OL00004 | 식용유 | 8950 |
P0015 | 맛있는화조유 | CD_OL00005 | 식용유 | 8800 |
P0016 | 맛있는참기름 | CD_OL00006 | 식용유 | 7100 |
P0017 | 맛있는들기름 | CD_OL00007 | 식용유 | 7900 |
P0018 | 맛있는고추기름 | CD_OL00008 | 식용유 | 6100 |
P0019 | 맛있는카놀라유 | CD_OL00009 | 식용유 | 5100 |
P0020 | 맛있는산초유 | CD_OL00010 | 식용유 | 6500 |
2. FOOD_ORDER
ORDER_ID | PRODUCT_ID | AMOUNT | PRODUCE_DATE | IN_DATE | OUT_DATE | FACTORY_ID | WAREHOUSE_ID |
OD00000056 | P0012 | 1000 | 2022-04-04 | 2022-04-21 | 2022-04-25 | FT19980002 | WH0032 |
OD00000057 | P0014 | 2500 | 2022-04-14 | 2022-04-27 | 2022-05-01 | FT19980002 | WH0033 |
OD00000058 | P0017 | 1200 | 2022-05-19 | 2022-05-28 | 2022-05-28 | FT20070002 | WH0033 |
OD00000059 | P0017 | 1000 | 2022-05-24 | 2022-05-30 | 2022-05-30 | FT20070002 | WH0038 |
OD00000060 | P0019 | 2000 | 2022-05-29 | 2022-06-08 | 2022-06-08 | FT20070002 | WH0035 |
3. 출력 기대값
PRODUCT_ID | PRODUCT_NAME | TOTAL_SALES |
P0017 | 맛있는들기름 | 17380000 |
P0019 | 맛있는카놀라유 | 10200000 |
문제
FOOD_PRODUCT와 FOOD_ORDER 테이블에서 생산일자가 2022년 5월인 식품들의 식품 ID, 식품 이름, 총매출을 조회하는 SQL문을 작성해주세요. 이때 결과는 총매출을 기준으로 내림차순 정렬해주시고 총매출이 같다면 식품 ID를 기준으로 오름차순 정렬해주세요.
아이디어
- 생산일자가 2022년 5월인 식품의 PRODUCT_ID별 판매량을 알아야 한다.
- PRODUCT_ID을 기준으로 GROUP BY 하여 생산년월이 2022-05인 상품들의 주문 개수를 구해준다.
- 해당 출력값을 서브쿼리로 하여 FOOD_PRODUCT와 INNER JOIN 해준다.
- PRICE와 주문 개수 AMOUNT를 곱하여 TOTAL_SALES별칭으로 출력한다.
- 정렬은 총매출을 기준으로 내림차순, 총매출이 같다면 식품 ID를 기준으로 오름차순 정렬이다.
정답
-- 코드를 입력하세요
SELECT A.PRODUCT_ID, A.PRODUCT_NAME, A.PRICE * B.AMOUNT AS TOTAL_SALES
FROM FOOD_PRODUCT A
INNER JOIN (
SELECT PRODUCT_ID, SUM(AMOUNT) AS AMOUNT
FROM FOOD_ORDER
WHERE TO_CHAR(PRODUCE_DATE, 'YYYYMM') = '202205'
GROUP BY PRODUCT_ID
) B
ON A.PRODUCT_ID = B.PRODUCT_ID
ORDER BY 3 DESC, 1
참고사항
없음
728x90
반응형
'알고리즘 공부 > SQL' 카테고리의 다른 글
[L3] 프로그래머스 ORACLE 카테고리 별 도서 판매량 집계하기 (1) | 2024.10.18 |
---|---|
[L4] 프로그래머스 ORACLE 주문량이 많은 아이스크림들 조회하기 (1) | 2024.10.18 |
[L3] 프로그래머스 ORACLE, MYSQL 오랜 기간 보호한 동물(1) (1) | 2024.10.18 |
[L2] 프로그래머스 ORACLE 상품 별 오프라인 매출 구하기 (0) | 2024.10.18 |
[L3] 프로그래머스 ORACLE 보호소에서 중성화한 동물 (0) | 2024.10.18 |