Growth ๐ŸŒณ/Practice ๐Ÿ’ป

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] 5์›” ์‹ํ’ˆ๋“ค์˜ ์ด๋งค์ถœ ์กฐํšŒํ•˜๊ธฐ

์ธ” 2023. 1. 4. 21:33

๐Ÿ“ข ๋ณธ ํฌ์ŠคํŒ…์— ํ™œ์šฉ๋˜๋Š” ๊ธฐ๋ณธ ๋ฌธ์ œ ๋ฐ ์ž๋ฃŒ ์ถœ์ฒ˜๋Š”

       ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ์ฝ”๋”ฉํ…Œ์ŠคํŠธ ์—ฐ์Šต,   
       https://school.programmers.co.kr/learn/challenges?page=1&languages=mysql%2Coracle
์ž„์„ ๋ฐํž™๋‹ˆ๋‹ค.


โ–  ๋ฌธ์ œ

๋ฌธ์ œ ์„ค๋ช…

๋‹ค์Œ์€ ์‹ํ’ˆ์˜ ์ •๋ณด๋ฅผ ๋‹ด์€ 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๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌํ•ด์ฃผ์„ธ์š”.


โ–  ํ’€์ด

  ๋ฌธ์ œ ์š”๊ตฌ์‚ฌํ•ญ  

FOOD_PRODUCT์™€ FOOD_ORDER ํ…Œ์ด๋ธ”์—์„œ                                     

>  PRODUCT_ID(๊ณตํ†ต์ปฌ๋Ÿผ)์œผ๋กœ ํ…Œ์ด๋ธ” ์กฐ์ธ์ด ํ•„์š”ํ•จ.

์ƒ์‚ฐ์ผ์ž๊ฐ€ 2022๋…„ 5์›”์ธ ์‹ํ’ˆ๋“ค์˜ ์‹ํ’ˆ ID, ์‹ํ’ˆ ์ด๋ฆ„, ์ด๋งค์ถœ์„ ์กฐํšŒ        > WHERE์ ˆ ์กฐ๊ฑด1

์ด๋•Œ ๊ฒฐ๊ณผ๋Š” ์ด๋งค์ถœ์„ ๊ธฐ์ค€์œผ๋กœ ๋‚ด๋ฆผ์ฐจ์ˆœ ์ •๋ ฌํ•ด์ฃผ์‹œ๊ณ                                    > (์ •๋ ฌ์กฐ๊ฑด1) ์‹ํ’ˆID๋ณ„ ์ด๋งค์ถœ์„ ๊ตฌํ•ด์•ผํ•จ*  

์ด๋งค์ถœ์ด ๊ฐ™๋‹ค๋ฉด ์‹ํ’ˆ ID๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌ                                          > (์ •๋ ฌ์กฐ๊ฑด2) 

 

* ํ’€์ด์—์„œ ์ฃผ์˜ํ•ด์•ผ ํ•  ์ 

์ฒ˜์Œ ์ฟผ๋ฆฌ์—์„œ SUM(FP.PRICE * FO.AMOUNT)๋กœ ์งœ์„œ ์˜ค๋‹ต์ด ๋‚˜์™”๋‹ค.

์กฐ์ธ๋œ ํ…Œ์ด๋ธ”์—์„œ PRODUCT_ID๋ณ„๋กœ ๋งค์ถœ์„ ๊ตฌํ•˜๋ ค๋ฉด ๊ฐ€๊ฒฉ x  ํŒ๋งค์ˆ˜๋Ÿ‰(PRODUCT_ID๋ณ„ AMOUNT์˜ ํ•ฉ) ์ด์–ด์•ผ ํ•œ๋‹ค.

SELECT FP.PRODUCT_ID, FP.PRODUCT_NAME, FP.PRICE * SUM (FO.AMOUNT) AS TOTAL_SALES
 FROM FOOD_PRODUCT FP
 RIGHT JOIN FOOD_ORDER FO
 ON FP.PRODUCT_ID = FO.PRODUCT_ID
 WHERE DATE_FORMAT(FO.PRODUCE_DATE, '%Y-%m') = '2022-05'
 GROUP BY 1
 ORDER BY 3 DESC, 1

 

๋ฐ์ดํ„ฐ ํ˜„์ง์ž๋ถ„๋“ค๊ป˜ SELECT์ ˆ์— ๊ฐ€๊ณต์ปฌ๋Ÿผ๊ณผ JOIN์— ๋Œ€ํ•ด ์งˆ๋ฌธํ–ˆ๋‹ค๊ฐ€ ์‹ค๋ฌด์—์„œ๋Š” ๋˜๋„๋ก LEFT JOIN์œผ๋กœ ์“ด๋‹ค๊ณ  ํ•œ๋‹ค๊ณ  ํ•˜์…”์„œ JOIN ๊ณผ WHERE์ ˆ ๊ฐ€๊ณต ๊ณผ์ •์„ ์ค„์—ฌ๋ณด๊ณ ์ž ์•„๋ž˜์ฒ˜๋Ÿผ ์ฟผ๋ฆฌ๋ฅผ์ˆ˜์ •ํ–ˆ๋‹ค.

WHERE์ ˆ์€ DATEF_FORMAT()  ๋‚ ์งœ๋ณ€ํ™˜ํ•จ์ˆ˜์—์„œ BETWEEN ์œผ๋กœ DATE ๊ฐ’ ํ•„ํ„ฐ๋งํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ฐ”๊ฟ”๋ณด์•˜๋‹ค.

SELECT FP.PRODUCT_ID, FP.PRODUCT_NAME, FP.PRICE * SUM (FO.AMOUNT) AS TOTAL_SALES
 FROM FOOD_ORDER FO
 LEFT JOIN FOOD_PRODUCT FP
 ON FP.PRODUCT_ID = FO.PRODUCT_ID
 
 WHERE FO.PRODUCE_DATE BETWEEN '2022-05-01 00:00:00' AND '2022-05-31 23:59:59'
 GROUP BY 1
 ORDER BY 3 DESC, 1