01/21 SQL ๋ฌธ์ œํ’€์ด (๐ŸŒŸ๐ŸŒŸ๐ŸŒŸ)

Data Architect / Engineerยท2024๋…„ 1์›” 21์ผ
1

1์ผ_1SQL

๋ชฉ๋ก ๋ณด๊ธฐ
10/63
post-thumbnail

๋ฌธ์ œ

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

๋‚ด๊ฐ€ ์ž‘์„ฑํ•œ Query

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;
  • ๐ŸŒŸ ๋Œ€์—ฌ๊ธฐ๊ฐ„, ์‚ฌ์šฉ๊ธฐ๊ฐ„ ๋“ฑ DATE๋ฅผ ํ†ตํ•œ ์—ฐ์‚ฐ์„ ํ•˜๋Š” ๊ฒฝ์šฐ, ๊ธฐ๊ฐ„ ๊ฒฝ๊ณ„๊ฐ’์˜ ์–‘ ๋ ๊ฐ’๋„ ํฌํ•จ์„ ํ•ด์•ผํ•˜๋ฏ€๋กœ ์ผ์ˆ˜ ์ฐจ์ด์— +1 ์„ ํ•ด์ค€๋‹ค!!
  • ๐ŸŒŸ DATETIME ํƒ€์ž… ์—ฐ์‚ฐ ์‹œ, ๋‹จ์ˆœํžˆ +, - ํ•˜์ง€ ์•Š๊ณ , DATEDIFF ์™€ ๊ฐ™์€ DATE ๊ด€๋ จ ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•œ๋‹ค! ๊ผญ
  • ๐ŸŒŸ ์ด ๋ฌธ์ œ์—์„œ, 'END_DATE', 'START_DATE' ์—ฐ์‚ฐ ํ•  ๋•Œ ๋‹จ์ˆœํžˆ -๋งŒ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ๊ฐ’์ด ํ‹€๋ฆฌ๊ฒŒ ๋‚˜์˜จ๋‹ค๋Š” ๊ฑธ ๋ฐฐ์šธ ์ˆ˜ ์žˆ์—ˆ์Œ
  • 'CAR_ID' ๋ณ„ ํ‰๊ท  ๋Œ€์—ฌ ๊ธฐ๊ฐ„์„ ๊ตฌํ•ด์•ผ ํ•˜๋ฏ€๋กœ, GROUP BY ์ด์šฉํ•˜์—ฌ 'CAR_ID' ๋ณ„ ๋ฐ์ดํ„ฐ๋ฅผ ์ถœ๋ ฅํ•˜๊ธฐ๋กœ ํ•˜๊ณ  ์ ‘๊ทผ

  • ํ‰๊ท  ๋Œ€์—ฌ ๊ธฐ๊ฐ„์ด 7์ผ ์ด์ƒ์ธ ์ž๋™์ฐจ๋“ค์„ ํ•„ํ„ฐ๋ง ํ•ด์•ผํ•˜๋ฏ€๋กœ,
    AVG(DATEDIFF(END_DATE, START_DATE)+1) ๋ฅผ ์ด์šฉํ•˜์—ฌ ํ‰๊ท  ๋Œ€์—ฌ ๊ธฐ๊ฐ„์„ ๊ตฌํ•ด์ค€๋‹ค. ์ด ๋•Œ, 'END_DATE'์™€ 'START_DATE' ์‚ฌ์ด์˜ ์ผ์ˆ˜๋ฅผ DATEDIFF ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด ๊ตฌํ•ด์ฃผ๊ณ , ์‹œ์ž‘์ผ๊ณผ ๋ ์ผ์˜ ์ผ์ˆ˜๋„ ํฌํ•จํ•ด์•ผ ํ•˜๋ฏ€๋กœ +1 ์„ ํ•ด์ค€๋‹ค. ์ด ๊ฐ’์„ AVGํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•ด ๊ตฌํ•ด์ค€๋‹ค.

  • ํ‰๊ท  ๋Œ€์—ฌ ๊ธฐ๊ฐ„์€ ์†Œ์ˆ˜์  ๋‘ ๋ฒˆ์งธ ์ž๋ฆฌ์—์„œ ๋ฐ˜์˜ฌ๋ฆผ ํ•˜๋ผ๊ณ  ํ–ˆ์œผ๋‹ˆ ROUND ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•˜์—ฌ ๋‘ ๋ฒˆ์งธ ์ž๋ฆฌ์—์„œ ๋ฐ˜์˜ฌ๋ฆผ ํ•ด ์ค€๋‹ค. ์ดํ›„ AS๋ฅผ ํ™œ์šฉํ•˜์—ฌ ROUND(AVG(DATEDIFF(END_DATE, START_DATE)+1), 1) AS AVERAGE_DURATION ๊ฐ’์„ 'AVERAGE_DURATION'์œผ๋กœ ๋ณ„์นญ์„ ์ค€๋‹ค.

  • HAVING์„ ์ด์šฉํ•˜์—ฌ 'CAR_ID' ๋ณ„๋กœ ๊ทธ๋ฃนํ•‘๋œ ๋ฐ์ดํ„ฐ์—์„œ 'AVERAGE_DURATION'์ด 7๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ ๊ฐ™์€ ๊ฐ’๋งŒ ํ•„ํ„ฐ๋งํ•œ๋‹ค

  • ORDER BY๋ฅผ ์ด์šฉํ•˜์—ฌ 'AVERAGE_DURATION' ๊ฐ’์ด ํฐ ์ˆœ์„œ๋Œ€๋กœ ์ถœ๋ ฅ, ๊ทธ ๊ฐ’์ด ๊ฐ™๋‹ค๋ฉด 'CAR_ID'๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋‚ด๋ฆผ์ฐจ์ˆœ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

profile
์งˆ๋ฌธ์€ ๊ณ„์†๋ผ ์•„์˜ค์—

0๊ฐœ์˜ ๋Œ“๊ธ€