๐Ÿ“Œ MySQL ์œผ๋กœ ํ’€์ด

 

๐Ÿ“Œ ๋ฌธ์ œ ๋งํฌ :

 

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

์ฝ”๋“œ ์ค‘์‹ฌ์˜ ๊ฐœ๋ฐœ์ž ์ฑ„์šฉ. ์Šคํƒ ๊ธฐ๋ฐ˜์˜ ํฌ์ง€์…˜ ๋งค์นญ. ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค์˜ ๊ฐœ๋ฐœ์ž ๋งž์ถคํ˜• ํ”„๋กœํ•„์„ ๋“ฑ๋กํ•˜๊ณ , ๋‚˜์™€ ๊ธฐ์ˆ  ๊ถํ•ฉ์ด ์ž˜ ๋งž๋Š” ๊ธฐ์—…๋“ค์„ ๋งค์นญ ๋ฐ›์œผ์„ธ์š”.

programmers.co.kr

 

๐Ÿ“Œ ๋ฌธ์ œ ์„ค๋ช… :

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

 

๋‹ค์Œ์€ ์–ด๋А ์ž๋™์ฐจ ๋Œ€์—ฌ ํšŒ์‚ฌ์˜ ์ž๋™์ฐจ ๋Œ€์—ฌ ๊ธฐ๋ก ์ •๋ณด๋ฅผ ๋‹ด์€ CAR_RENTAL_COMPANY_RENTAL_HISTORY ํ…Œ์ด๋ธ”์ž…๋‹ˆ๋‹ค. CAR_RENTAL_COMPANY_RENTAL_HISTORY ํ…Œ์ด๋ธ”์€ ์•„๋ž˜์™€ ๊ฐ™์€ ๊ตฌ์กฐ๋กœ ๋˜์–ด์žˆ์œผ๋ฉฐ, HISTORY_ID, CAR_ID, START_DATE, END_DATE ๋Š” ๊ฐ๊ฐ ์ž๋™์ฐจ ๋Œ€์—ฌ ๊ธฐ๋ก ID, ์ž๋™์ฐจ ID, ๋Œ€์—ฌ ์‹œ์ž‘์ผ, ๋Œ€์—ฌ ์ข…๋ฃŒ์ผ์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.

HISTORY_ID INTEGER FALSE
CAR_ID INTEGER FALSE
START_DATE DATE FALSE
END_DATE DATE FALSE

 

 


์ถ”์ธก) 

car_id๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๊ทธ๋ฃนํ™” ํ•˜๋Š”๋ฐ

having์„ ํ†ตํ•ด ๊ทธ๋ฃน ํ†ต๊ณ„์—์„œ ๋ Œํƒˆ ์ข…๋ฃŒ๋‚ ์งœ์—์„œ ์‹œ์ž‘๋‚ ์งœ์™€์˜ ์ฐจ์ด๋“ค์˜ ํ‰๊ท ์„ ๋‚ด์–ด 7์ผ ์ด์ƒ์ธ ๊ฒฝ์šฐ๋งŒ์„ ํ•„ํ„ฐ๋ง

๊ทธ๋ฆฌ๊ณ  car_id์™€ ํ‰๊ท ์„ 2๋ฒˆ์งธ ์†Œ์ˆ˜์  ์ž๋ฆฌ์—์„œ ๋ฐ˜์˜ฌ๋ฆผํ•œ ๊ฐ’์„ ์ถœ๋ ฅํ•  ์ˆ˜ ์žˆ๊ฒŒ roundํ•จ์ˆ˜๊นŒ์ง€ ์‚ฌ์šฉํ•˜๋ฉด ๋ ๊ฑฐ ๊ฐ™๋‹ค.

 

 

์ฟผ๋ฆฌ) 

* 1์ฐจ) ์‹คํŒจ

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

* 2์ฐจ) ์„ฑ๊ณต

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

 

๋ฆฌ๋ทฐ) 

๋‹จ์ˆœํžˆ date๋‚ ์งœ๋ผ๋ฆฌ - ํ•œ๋‹คํ•ด์„œ ๊ฐ’์ด ๋‚˜์˜ค์ง€ ์•Š๋Š”๋‹ค. 

DATEDIFF ํ•จ์ˆ˜๋กœ ๋‚ ์งœ ์ฐจ์ด๋ฅผ ๊ตฌํ•ด์•ผ ์ •ํ™•ํ•œ ๋‚ ์งœ ์ฐจ์ด๊ฐ€ ๊ณ„์‚ฐ๋œ๋‹ค. 

๊ทธ๋ฆฌ๊ณ  DATEDIFF ์˜ ์ฐจ์ด๋กœ๋Š” ์ฒ˜์Œ ์‹œ์ž‘ ๋‚ ์งœ๊ฐ€ ํฌํ•จ๋˜์ง€ ์•Š์œผ๋‹ˆ +1์ด ํ•„์š”ํ•˜๋‹ค!

(๋‚ ์งœ ๊ณ„์‚ฐํ•  ๋•Œ ์ด๊ฑฐ ํ•ญ์ƒ ์กฐ์‹ฌํ•ด์•ผํ•  ๋“ฏ)

+ Recent posts