Growth ๐ŸŒณ/Practice ๐Ÿ’ป

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] ์กฐํšŒ์ˆ˜๊ฐ€ ๊ฐ€์žฅ ๋งŽ์€ ์ค‘๊ณ ๊ฑฐ๋ž˜ ๊ฒŒ์‹œํŒ์˜ ์ฒจ๋ถ€ํŒŒ์ผ ์กฐํšŒํ•˜๊ธฐ

์ธ” 2023. 3. 21. 20:10

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

       ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ์ฝ”๋”ฉํ…Œ์ŠคํŠธ ์—ฐ์Šต,   

      https://school.programmers.co.kr/learn/challenges?page=1&languages=mysql%2Coracle์ž„์„ ๋ฐํž™๋‹ˆ๋‹ค.

      · ๋ณธ ๋ฌธ์ œ https://school.programmers.co.kr/learn/courses/30/lessons/164671


โ–  ๋ฌธ์ œ

๋ฌธ์ œ ์„ค๋ช…

๋‹ค์Œ์€ ์ค‘๊ณ ๊ฑฐ๋ž˜ ๊ฒŒ์‹œํŒ ์ •๋ณด๋ฅผ ๋‹ด์€ USED_GOODS_BOARD ํ…Œ์ด๋ธ”๊ณผ ์ค‘๊ณ ๊ฑฐ๋ž˜ ๊ฒŒ์‹œํŒ ์ฒจ๋ถ€ํŒŒ์ผ ์ •๋ณด๋ฅผ ๋‹ด์€ USED_GOODS_FILE ํ…Œ์ด๋ธ”์ž…๋‹ˆ๋‹ค. 

USED_GOODS_BOARD ํ…Œ์ด๋ธ”์€ ๋‹ค์Œ๊ณผ ๊ฐ™์œผ๋ฉฐ BOARD_IDWRITER_IDTITLECONTENTSPRICECREATED_DATESTATUSVIEWS์€ ๊ฒŒ์‹œ๊ธ€ ID, ์ž‘์„ฑ์ž ID, ๊ฒŒ์‹œ๊ธ€ ์ œ๋ชฉ, ๊ฒŒ์‹œ๊ธ€ ๋‚ด์šฉ, ๊ฐ€๊ฒฉ, ์ž‘์„ฑ์ผ, ๊ฑฐ๋ž˜์ƒํƒœ, ์กฐํšŒ์ˆ˜๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

Column name Type Nullable
BOARD_ID VARCHAR(5) FALSE
WRITER_ID VARCHAR(50) FALSE
TITLE VARCHAR(100) FALSE
CONTENTS VARCHAR(1000) FALSE
PRICE NUMBER FALSE
CREATED_DATE DATE FALSE
STATUS VARCHAR(10) FALSE
VIEWS NUMBER FALSE

USED_GOODS_FILE ํ…Œ์ด๋ธ”์€ ๋‹ค์Œ๊ณผ ๊ฐ™์œผ๋ฉฐ FILE_IDFILE_EXTFILE_NAMEBOARD_ID๋Š” ๊ฐ๊ฐ ํŒŒ์ผ ID, ํŒŒ์ผ ํ™•์žฅ์ž, ํŒŒ์ผ ์ด๋ฆ„, ๊ฒŒ์‹œ๊ธ€ ID๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

Column name Type Nullable
FILE_ID VARCHAR(10) FALSE
FILE_EXT VARCHAR(5) FALSE
FILE_NAME VARCHAR(256) FALSE
BOARD_ID VARCHAR(10) FALSE

๋ฌธ์ œ

USED_GOODS_BOARD์™€ USED_GOODS_FILE ํ…Œ์ด๋ธ”์—์„œ ์กฐํšŒ์ˆ˜๊ฐ€ ๊ฐ€์žฅ ๋†’์€ ์ค‘๊ณ ๊ฑฐ๋ž˜ ๊ฒŒ์‹œ๋ฌผ์— ๋Œ€ํ•œ ์ฒจ๋ถ€ํŒŒ์ผ ๊ฒฝ๋กœ๋ฅผ ์กฐํšŒํ•˜๋Š” SQL๋ฌธ์„ ์ž‘์„ฑํ•ด์ฃผ์„ธ์š”. ์ฒจ๋ถ€ํŒŒ์ผ ๊ฒฝ๋กœ๋Š” FILE ID๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋‚ด๋ฆผ์ฐจ์ˆœ ์ •๋ ฌํ•ด์ฃผ์„ธ์š”. ๊ธฐ๋ณธ์ ์ธ ํŒŒ์ผ๊ฒฝ๋กœ๋Š” /home/grep/src/ ์ด๋ฉฐ, ๊ฒŒ์‹œ๊ธ€ ID๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋””๋ ‰ํ† ๋ฆฌ๊ฐ€ ๊ตฌ๋ถ„๋˜๊ณ , ํŒŒ์ผ์ด๋ฆ„์€ ํŒŒ์ผ ID, ํŒŒ์ผ ์ด๋ฆ„, ํŒŒ์ผ ํ™•์žฅ์ž๋กœ ๊ตฌ์„ฑ๋˜๋„๋ก ์ถœ๋ ฅํ•ด์ฃผ์„ธ์š”.

์กฐํšŒ์ˆ˜๊ฐ€ ๊ฐ€์žฅ ๋†’์€ ๊ฒŒ์‹œ๋ฌผ์€ ํ•˜๋‚˜๋งŒ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค.


โ–  ํ’€์ด

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

์กฐํšŒ์ˆ˜๊ฐ€ ๊ฐ€์žฅ ๋†’์€ ์ค‘๊ณ ๊ฑฐ๋ž˜ ๊ฒŒ์‹œ๋ฌผ์— ๋Œ€ํ•œ                        <  VIEWS ๊ธฐ์ค€์œผ๋กœ ์ •๋ ฌํ–ˆ์„ ๋•Œ 1๋“ฑ ๊ฒŒ์‹œ๋ฌผ

์ฒจ๋ถ€ํŒŒ์ผ ๊ฒฝ๋กœ๋ฅผ ์กฐํšŒํ•˜๋Š” SQL๋ฌธ์„ ์ž‘์„ฑ

> ๊ฒŒ์‹œ๊ธ€ ์ •๋ณด์™€ ๊ฒŒ์‹œ๊ธ€ ์ฒจ๋ถ€ํŒŒ์ผ์— ๋Œ€ํ•œ ํ…Œ์ด๋ธ” join์€ left join์œผ๋กœ ๊ณตํ†ต ์ปฌ๋Ÿผ BOARD_ID๋ฅผ ์‚ฌ์šฉ.

 

์ฒจ๋ถ€ํŒŒ์ผ ๊ฒฝ๋กœ๋Š” FILE ID๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋‚ด๋ฆผ์ฐจ์ˆœ ์ •๋ ฌ          < ์ •๋ ฌ์กฐ๊ฑด1

 

โœ” ํŒŒ์ผ๊ฒฝ๋กœ ์ƒ์„ฑ๋ฒ• :

๊ธฐ๋ณธ์ ์ธ ํŒŒ์ผ๊ฒฝ๋กœ๋Š” /home/grep/src/ ์ด๋ฉฐ

๊ฒŒ์‹œ๊ธ€ ID๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋””๋ ‰ํ† ๋ฆฌ๊ฐ€ ๊ตฌ๋ถ„๋˜๊ณ , ํŒŒ์ผ์ด๋ฆ„์€ ํŒŒ์ผ ID, ํŒŒ์ผ ์ด๋ฆ„, ํŒŒ์ผ ํ™•์žฅ์ž๋กœ ๊ตฌ์„ฑ๋˜๋„๋ก ์ถœ๋ ฅ 

 

> ๋ฌธ์ž์—ด ํ•ฉ์น˜๊ธฐ๊ฐ€ ํ•„์š”ํ•˜๋‹ค. ๋ฌธ์ž์—ด์€ CONCAT(๋ฌธ์ž์—ด1, ๋ฌธ์ž์—ด2, ๋ฌธ์ž์—ด3, ...) ์œผ๋กœ ํ•ฉ์น  ์ˆ˜ ์žˆ๋‹ค.

 

SELECT  CONCAT('/home/grep/src/' , UGF.BOARD_ID , '/' ,
              UGF.FILE_ID , UGF.FILE_NAME, UGF.FILE_EXT) AS FILE_PATH
 FROM USED_GOODS_FILE UGF
 LEFT JOIN USED_GOODS_BOARD UGB
 ON UGB.BOARD_ID = UGF.BOARD_ID
 WHERE UGB.BOARD_ID = (SELECT BOARD_ID
                       FROM USED_GOODS_BOARD
                       ORDER BY VIEWS DESC
                       LIMIT 1)
 ORDER BY UGF.FILE_ID DESC

 

'์กฐํšŒ์ˆ˜๊ฐ€ ๊ฐ€์žฅ ๋†’์€' ๊ฒŒ์‹œ๊ธ€์„ ์ฐพ๋Š” ๊ฒƒ์€

¹์œ„์ฒ˜๋Ÿผ ์กฐํšŒ์ˆ˜๊ฐ€ ๊ฐ€์žฅ ๋†’์€ ๊ฒŒ์‹œ๊ธ€์˜ BOARD_ID๋ฅผ WHERE์กฐ๊ฑด์œผ๋กœ ์ฃผ๊ฑฐ๋‚˜

²์กฐํšŒ์ˆ˜ ์ตœ๋Œ€๊ฐ’์„ WHERE์˜ ์กฐํšŒ์ˆ˜ ๊ฒ€์ƒ‰ ์กฐ๊ฑด์œผ๋กœ ์ค„ ์ˆ˜ ์žˆ๋‹ค.

๋‹จ, 2๋ฒˆ ๋ฐฉ๋ฒ•์€ ๋ฌธ์ œ์— ์กฐํšŒ์ˆ˜๊ฐ€ ๊ฐ€์žฅ ๋†’์€ ๊ฒŒ์‹œ๋ฌผ์€ ํ•˜๋‚˜๋งŒ ์กด์žฌํ•œ๋‹ค. ๋Š” ์กฐ๊ฑด์ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ€๋Šฅํ•˜๋‹ค.