SQL

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

1eehyunji 2023. 8. 1. 20:48

๋ฌธ์ œ ์„ค๋ช…

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

Column nameTypeNullable

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

 

๋ฌธ์ œํ’€์ด

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 AVERAGE_DURATION>=7
ORDER BY AVERAGE_DURATION DESC, CAR_ID DESC;

DATEDIFF ํ•จ์ˆ˜๋ฅผ ์ฒ˜์Œ ์จ๋ดค๋‹ค! 

์˜ค๋ผํด์—์„  ๋‘ ๋‚ ์งœ๋ฅผ ๋นผ๊ธฐ(-) ์—ฐ์‚ฐํ•ด์ฃผ๋ฉด ๋‘ ๋‚ ์งœ ์‚ฌ์ด์˜ ์ฐจ์ด๋ฅผ ๊ณ„์‚ฐํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€๋Šฅํ–ˆ๋Š”๋ฐ, MySQL์€ DATEDIFF๋‚˜ TIMESTAMPDIFF์™€ ๊ฐ™์€ ๋ณ„๋„์˜ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.

 

1. CAR_RENTAL_COMPANY_RENTAL_HISTORY ํ…Œ์ด๋ธ”์„ CAR_ID๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๊ทธ๋ฃนํ™”ํ•ด์ค€๋‹ค. 

 

2. ํ‰๊ท  ๋Œ€์—ฌ๊ธฐ๊ฐ„์€ ๋Œ€์—ฌ ์ข…๋ฃŒ ๋‚ ์งœ์™€ ๋Œ€์—ฌ ์‹œ์ž‘ ๋‚ ์งœ์˜ ์ฐจ์ด๋ฅผ ๊ตฌํ•˜๊ณ  +1 ํ•ด์ค€ ๊ฐ’๋“ค์˜ ๊ฐ ์ž๋™์ฐจ ์•„์ด๋”” ๊ทธ๋ฃน๋ณ„๋กœ ํ‰๊ท ์„ ๋‚ธ ๊ฐ’์ด๋‹ค. 

* +1 ํ•ด์ฃผ๋Š” ์ด์œ ๋ฅผ ์˜ˆ๋กœ ๋“ค์ž๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

2022-10-02๋ถ€ํ„ฐ 2022-10-04๊นŒ์ง€ ๋Œ€์—ฌํ–ˆ๋‹ค๋ฉด 10์›” 2,3,4์ผ ์ด 3์ผ์„ ๋Œ€์—ฌํ•œ ๊ฒƒ์ธ๋ฐ, DATEDIFF๋ฅผ ์ด์šฉํ•ด์„œ ๋‹จ์ˆœํžˆ ํ•ด๋‹น ๋‚ ์งœ์˜ ์ฐจ์ด๋งŒ์„ ๊ตฌํ•˜๋ฉด 2๊ฐ€ ๋œ๋‹ค. ๊ทธ๋ž˜์„œ +1์„ ํ•ด์ค˜์„œ ์˜ฌ๋ฐ”๋ฅธ ๋Œ€์—ฌ๊ธฐ๊ฐ„์„ ๊ตฌํ•ด์•ผ ํ•œ๋‹ค. 

 

3. ์ด๋ ‡๊ฒŒ AVG ํ•จ์ˆ˜์™€ DATEDIFF ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•ด์„œ ๊ฐ ๊ทธ๋ฃน์˜ ํ‰๊ท  ๋Œ€์—ฌ๊ธฐ๊ฐ„์„ ๊ตฌํ•˜๊ณ  ๋‚˜๋ฉด, ROUND ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•ด์„œ ์†Œ์ˆ˜์  ๋‘˜์งธ ์ž๋ฆฌ์—์„œ ๋ฐ˜์˜ฌ๋ฆผํ•˜๋Š”, ์ฆ‰ ์†Œ์ˆ˜์  ์ฒซ์งธ ์ž๋ฆฌ๊นŒ์ง€๋งŒ ํ‘œํ˜„ํ•˜๋Š” ์—ฐ์‚ฐ์„ ํ•ด์ค€๋‹ค.

 

4. ์œ„ ์—ฐ์‚ฐ๋“ค์„ ๊ฑฐ์ณ์„œ ์ตœ์ข…์ ์œผ๋กœ ๋‚˜์˜ค๋Š” ํ‰๊ท  ๋Œ€์—ฌ๊ธฐ๊ฐ„์„ AVERAGE_DURATION์œผ๋กœ ๋ณ„์นญ์„ ๋ถ™์ด๊ณ , HAVING ์ ˆ์—์„œ AVERAGE_DURATION์ด 7 ์ด์ƒ์ธ ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”์ถœํ•œ๋‹ค. 

 

5. ์ด๋ ‡๊ฒŒ ์ถ”์ถœ๋œ ๋ฐ์ดํ„ฐ๋“ค์˜ ์ž๋™์ฐจ ์•„์ด๋””์™€ ํ‰๊ท  ๋Œ€์—ฌ๊ธฐ๊ฐ„์„ ํ‰๊ท  ๋Œ€์—ฌ๊ธฐ๊ฐ„๊ณผ ์ž๋™์ฐจ ์•„์ด๋””๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋‚ด๋ฆผ์ฐจ์ˆœ ์ •๋ ฌํ•˜์—ฌ ์ถœ๋ ฅํ•œ๋‹ค.