๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

Database/DB ๋ฌธ์ œํ’€์ด

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] ์ž…์–‘ ์‹œ๊ฐ ๊ตฌํ•˜๊ธฐ(2)

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] ์ž…์–‘ ์‹œ๊ฐ ๊ตฌํ•˜๊ธฐ(2) MySQL

๋ฌธ์ œ : ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค_์ž…์–‘ ์‹œ๊ฐ ๊ตฌํ•˜๊ธฐ(2)

๋ฌธ์ œ ์„ค๋ช…

๋ฌธ์ œ์—์„œ ๋™๋ฌผ ๋ณดํ˜ธ์†Œ์—์„œ ์ž…์–‘ ๋ณด๋‚ธ ๋™๋ฌผ์˜ ์ •๋ณด๊ฐ€ ๋‹ด๊ธด ํ…Œ์ด๋ธ”์ด ์ฃผ์–ด์ง‘๋‹ˆ๋‹ค.

ํ…Œ์ด๋ธ”์˜ DATETIME ์นผ๋Ÿผ์—๋Š” ๋™๋ฌผ์„ ์ž…์–‘ ๋ณด๋‚ธ ์‹œ๊ฐ„์ด ์ฃผ์–ด์ง€๋Š”๋ฐ, ์ด๋•Œ ๊ฐ ์‹œ๊ฐ„๋ณ„๋กœ(0์‹œ ~ 23์‹œ) ์ž…์–‘์ด ๋ช‡ ๊ฑด ๋ฐœ์ƒํ–ˆ๋Š”์ง€๋ฅผ ์กฐํšŒํ•˜๋Š” SQL ๋ฌธ์„ ์ž‘์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.


Solution

์‚ฌ์šฉ์ž ๋ณ€์ˆ˜ ์„ ์–ธ, Subquery

@hour๋ผ๋Š” ์‚ฌ์šฉ์ž ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•˜๊ณ  -1๋กœ ์ดˆ๊ธฐํ™”ํ•ด ์ค๋‹ˆ๋‹ค.(sql์˜ ์‚ฌ์šฉ์ž ๋ณ€์ˆ˜๋Š” @~๋กœ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.)

@hour์„ 1์”ฉ ์ฆ๊ฐ€์‹œ์ผœ์ฃผ๋ฉด์„œ ๊ฐ ์‹œ๊ฐ„๋ณ„ count๋ฅผ ์กฐํšŒํ•˜๋Š” ์„œ๋ธŒ์ฟผ๋ฆฌ๋ฌธ์œผ๋กœ ์‹œ๊ฐ„๋ณ„ ์ž…์–‘ ์ˆ˜๋ฅผ ์กฐํšŒํ•ฉ๋‹ˆ๋‹ค.

DATETIME์—์„œ HOUR ์ •๋ณด๋งŒ ์ถ”์ถœํ•ด์•ผ ํ•˜๋ฏ€๋กœ, HOUR() ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•ฉ๋‹ˆ๋‹ค.

์ด๋•Œ hour+1๊นŒ์ง€ ์กฐํšŒ๋˜๋ฏ€๋กœ, WHERE ์ ˆ์˜ ์กฐ๊ฑด์€ 23๋ณด๋‹ค ์ž‘์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค.


ํ’€์ด

SET @hour = -1;
SELECT (@hour := @hour+1) as HOUR,
(SELECT COUNT(DATETIME) FROM ANIMAL_OUTS WHERE HOUR(DATETIME) = @hour)
as COUNT
FROM ANIMAL_OUTS
WHERE @hour < 23;