[프로그래머스]5월 식품들의 총매출 조회하기 - SQL

Donghyun·2024년 7월 8일
0

Code Kata - SQL

목록 보기
8/61
post-thumbnail

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

문제 설명

다음은 식품의 정보를 담은 FOOD_PRODUCT 테이블과 식품의 주문 정보를 담은 FOOD_ORDER 테이블입니다. FOOD_PRODUCT테이블은 다음과 같으며 PRODUCT_IDPRODUCT_NAMEPRODUCT_CDCATEGORYPRICE는 식품 ID, 식품 이름, 식품코드, 식품분류, 식품 가격을 의미합니다.

Column nameTypeNullable
PRODUCT_IDVARCHAR(10)FALSE
PRODUCT_NAMEVARCHAR(50)FALSE
PRODUCT_CDVARCHAR(10)TRUE
CATEGORYVARCHAR(10)TRUE
PRICENUMBERTRUE

FOOD_ORDER 테이블은 다음과 같으며 ORDER_IDPRODUCT_IDAMOUNT,  PRODUCE_DATEIN_DATEOUT_DATEFACTORY_IDWAREHOUSE_ID는 각각 주문 ID, 제품 ID, 주문량, 생산일자, 입고일자, 출고일자, 공장 ID, 창고 ID를 의미합니다.

Column nameTypeNullable
ORDER_IDVARCHAR(10)FALSE
PRODUCT_IDVARCHAR(5)FALSE
AMOUNTNUMBERFALSE
PRODUCE_DATEDATETRUE
IN_DATEDATETRUE
OUT_DATEDATETRUE
FACTORY_IDVARCHAR(10)FALSE
WAREHOUSE_IDVARCHAR(10)FALSE

문제

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


예시

FOOD_PRODUCT 테이블이 다음과 같고

PRODUCT_IDPRODUCT_NAMEPRODUCT_CDCATEGORYPRICE
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

FOOD_ORDER 테이블이 다음과 같을 때

ORDER_IDPRODUCT_IDAMOUNTPRODUCE_DATEIN_DATEOUT_DATEFACTORY_IDWAREHOUSE_ID
OD00000056P001210002022-04-042022-04-212022-04-25FT19980002WH0032
OD00000057P001425002022-04-142022-04-272022-05-01FT19980002WH0033
OD00000058P001712002022-05-192022-05-282022-05-28FT20070002WH0033
OD00000059P001710002022-05-242022-05-302022-05-30FT20070002WH0038
OD00000060P001920002022-05-292022-06-082022-06-08FT20070002WH0035

SQL을 실행하면 다음과 같이 출력되어야 합니다.

PRODUCT_IDPRODUCT_NAMETOTAL_SALES
P0017맛있는들기름17380000
P0019맛있는카놀라유10200000

문제풀이

  1. FOOD_PRODUCT 테이블과 FOOD_ORDER 테이블을 PRODUCT_ID 를 기준으로 JOIN 하는데 이때 PRODUCE_DATE 가 2022년 5월인 식품이어야 한다.
  2. 식품 ID, 식품 이름, 총매출 조회하기
    • 총매출 = SUM(가격 * 수량)
  3. 판매량을 제품별로 집계해야 하기 때문에 PRODUCT_ID 를 기준으로 그룹화해주고
  4. 마지막으로 총매출을 기준으로 내림차순, 총매출이 같다면 식품 ID 를 기준으로 오름차순 정렬하기!

전체 코드로 합치기

SELECT
    fp.PRODUCT_ID,
    fp.PRODUCT_NAME,
    SUM(fp.PRICE*fo.AMOUNT) TOTAL_SALES
FROM FOOD_PRODUCT fp
    JOIN FOOD_ORDER fo
    ON fp.PRODUCT_ID = fo.PRODUCT_ID
    WHERE fo.PRODUCE_DATE like '%2022-05%'
GROUP BY 1
ORDER BY 3 DESC, 1 ASC;
profile
데이터분석 공부 일기~!

0개의 댓글