Growth ๐ŸŒณ/Practice ๐Ÿ’ป

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] ์ž๋™์ฐจ ํ‰๊ท  ๋Œ€์—ฌ ๊ธฐ๊ฐ„ ๊ตฌํ•˜๊ธฐ

์ธ” 2023. 3. 11. 01:25

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

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

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


โ–  ๋ฌธ์ œ

๋ฌธ์ œ ์„ค๋ช…

๋‹ค์Œ์€ ์–ด๋Š ์ž๋™์ฐจ ๋Œ€์—ฌ ํšŒ์‚ฌ์˜ ์ž๋™์ฐจ ๋Œ€์—ฌ ๊ธฐ๋ก ์ •๋ณด๋ฅผ ๋‹ด์€ CAR_RENTAL_COMPANY_RENTAL_HISTORY ํ…Œ์ด๋ธ”์ž…๋‹ˆ๋‹ค. 

CAR_RENTAL_COMPANY_RENTAL_HISTORY ํ…Œ์ด๋ธ”์€ ์•„๋ž˜์™€ ๊ฐ™์€ ๊ตฌ์กฐ๋กœ ๋˜์–ด์žˆ์œผ๋ฉฐ, 

HISTORY_IDCAR_IDSTART_DATEEND_DATE ๋Š” ๊ฐ๊ฐ ์ž๋™์ฐจ ๋Œ€์—ฌ ๊ธฐ๋ก ID, ์ž๋™์ฐจ ID, ๋Œ€์—ฌ ์‹œ์ž‘์ผ, ๋Œ€์—ฌ ์ข…๋ฃŒ์ผ์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.

Column name Type Nullable
HISTORY_ID INTEGER FALSE
CAR_ID INTEGER FALSE
START_DATE DATE FALSE
END_DATE DATE FALSE

๋ฌธ์ œ 

CAR_RENTAL_COMPANY_RENTAL_HISTORY ํ…Œ์ด๋ธ”์—์„œ ํ‰๊ท  ๋Œ€์—ฌ ๊ธฐ๊ฐ„์ด 7์ผ ์ด์ƒ์ธ ์ž๋™์ฐจ๋“ค์˜ ์ž๋™์ฐจ ID์™€ ํ‰๊ท  ๋Œ€์—ฌ ๊ธฐ๊ฐ„(์ปฌ๋Ÿผ๋ช…: AVERAGE_DURATION) ๋ฆฌ์ŠคํŠธ๋ฅผ ์ถœ๋ ฅํ•˜๋Š” SQL๋ฌธ์„ ์ž‘์„ฑํ•ด์ฃผ์„ธ์š”. ํ‰๊ท  ๋Œ€์—ฌ ๊ธฐ๊ฐ„์€ ์†Œ์ˆ˜์  ๋‘๋ฒˆ์งธ ์ž๋ฆฌ์—์„œ ๋ฐ˜์˜ฌ๋ฆผํ•˜๊ณ , ๊ฒฐ๊ณผ๋Š” ํ‰๊ท  ๋Œ€์—ฌ ๊ธฐ๊ฐ„์„ ๊ธฐ์ค€์œผ๋กœ ๋‚ด๋ฆผ์ฐจ์ˆœ ์ •๋ ฌํ•ด์ฃผ์‹œ๊ณ , ํ‰๊ท  ๋Œ€์—ฌ ๊ธฐ๊ฐ„์ด ๊ฐ™์œผ๋ฉด ์ž๋™์ฐจ ID๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋‚ด๋ฆผ์ฐจ์ˆœ ์ •๋ ฌํ•ด์ฃผ์„ธ์š”.


โ–  ํ’€์ด

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

ํ‰๊ท  ๋Œ€์—ฌ ๊ธฐ๊ฐ„์ด 7์ผ ์ด์ƒ์ธ ์ž๋™์ฐจ๋“ค์˜ ์ž๋™์ฐจ ID์™€ ํ‰๊ท  ๋Œ€์—ฌ ๊ธฐ๊ฐ„(์ปฌ๋Ÿผ๋ช…: AVERAGE_DURATION) ๋ฆฌ์ŠคํŠธ๋ฅผ ์ถœ๋ ฅ

> ๋Œ€์—ฌ๊ธฐ๊ฐ„์€ END_DATE์™€ START_DATE์˜ ์ผ์ž ์ฐจ์ด์— +1์„  ํ•ด์ฃผ๋ฉด ๋œ๋‹ค ¹

> ์ง‘๊ณ„ํ•จ์ˆ˜ AVG()์— ๋Œ€ํ•œ ์กฐ๊ฑด์„ ์„ค์ •ํ•˜๊ณ  ์žˆ์œผ๋ฏ€๋กœ, WHERE์ ˆ์ด ์•„๋‹Œ HAVING์ ˆ์„ ์‚ฌ์šฉํ•ด์„œ ์กฐ๊ฑด์„ ๋ถ€์—ฌํ•  ์ˆ˜ ์žˆ๋‹ค.

 

ํ‰๊ท  ๋Œ€์—ฌ ๊ธฐ๊ฐ„์€ ์†Œ์ˆ˜์  ๋‘๋ฒˆ์งธ ์ž๋ฆฌ์—์„œ ๋ฐ˜์˜ฌ๋ฆผํ•˜๊ณ ,              > ์ง‘๊ณ„ํ•จ์ˆ˜ ROUND() ์‚ฌ์šฉํ•ด์„œ ๋ฐ˜์˜ฌ๋ฆผ

๊ฒฐ๊ณผ๋Š” ํ‰๊ท  ๋Œ€์—ฌ ๊ธฐ๊ฐ„์„ ๊ธฐ์ค€์œผ๋กœ ๋‚ด๋ฆผ์ฐจ์ˆœ ์ •๋ ฌ                        > ์ •๋ ฌ์กฐ๊ฑด1

ํ‰๊ท  ๋Œ€์—ฌ ๊ธฐ๊ฐ„์ด ๊ฐ™์œผ๋ฉด ์ž๋™์ฐจ ID๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋‚ด๋ฆผ์ฐจ์ˆœ ์ •๋ ฌ > ์ •๋ ฌ์กฐ๊ฑด2

SELECT CAR_ID
    , ROUND(AVG(DATEDIFF(END_DATE, START_DATE)+1), 1) AS AVERAGE_DURATION
 FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
 GROUP BY 1
 HAVING AVERAGE_DURATION >= 7
 ORDER BY 2 DESC, 1 DESC;

 

๋˜๋Š” DATE_ADD ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ด์„œ END_DATE์— ํ•˜๋ฃจ์”ฉ ๋”ํ•ด์ค€ ์ผ์ž๋ฅผ ๊ธฐ์ค€์ผ์ž๋กœ ์žก๊ณ 

DATEDIFF๋ฅผ ์‚ฌ์šฉํ•ด๋„ ๋Œ€์—ฌ๊ธฐ๊ฐ„์„ ๊ตฌํ•  ์ˆ˜ ์žˆ๋‹ค. 

-- DATE_ADD ํ•จ์ˆ˜ ์‚ฌ์šฉ

SELECT CAR_ID
    , ROUND(AVG(DATEDIFF(DATE_ADD(END_DATE, INTERVAL 1 DAY), START_DATE)), 1) AS AVERAGE_DURATION
 FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
 GROUP BY 1
 HAVING AVERAGE_DURATION >= 7
 ORDER BY 2 DESC, 1 DESC;