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

SQL

[SQL] MySQL - SET ๊ณผ ์„œ๋ธŒ์ฟผ๋ฆฌ ์‚ฌ์šฉํ•˜๊ธฐ

๋ฐ˜์‘ํ˜•

๐Ÿ”Š ๋ณธ ํฌ์ŠคํŒ…์—์„œ ์‚ฌ์šฉ๋˜๋Š” ํ…Œ์ด๋ธ”์˜ ์ž๋ฃŒ์™€ ์ถœ์ฒ˜๋Š” ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค์ž„์„ ๋ฐํž™๋‹ˆ๋‹ค. ๋” ๋‹ค์–‘ํ•œ SQL ๋ฌธ์ œ๋ฅผ ํ’€์–ด๋ณด์‹œ๋ ค๋ฉด ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ์‚ฌ์ดํŠธ๋ฅผ ๋ฐฉ๋ฌธํ•ด๋ณด์„ธ์š”! 

 

์ฝ”๋”ฉ ํ…Œ์ŠคํŠธ๋ฅผ ์ œ๊ณตํ•˜๋Š” ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ์‚ฌ์ดํŠธ

 

์ด๋ฒˆ ํฌ์ŠคํŒ…์—์„œ ์†Œ๊ฐœํ•  SQL ๊ตฌ๋ฌธ์€ ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค SQL ๊ณ ๋“์  Kit์˜ Group by ์นดํ…Œ๊ณ ๋ฆฌ์˜ ์ž…์–‘ ์‹œ๊ฐ ๊ตฌํ•˜๊ธฐ(2) ๋ฌธ์ œ ํ’€์ด์— ์‚ฌ์šฉ๋œ ๊ตฌ๋ฌธ์ด๋‹ค. ๋ฌธ์ œ ํ’€์ด์— ์‚ฌ์šฉ๋  ํ…Œ์ด๋ธ”๊ณผ ๋ฌธ์ œ์— ๋Œ€ํ•œ ์ž์„ธํ•œ ์„ค๋ช…์€ ํ•ด๋‹น ๋ฌธ์ œ์˜ ๋งํฌ๋ฅผ ์ฐธ๊ณ ํ•˜์ž.

 

๋ฌธ์ œ์—์„œ ์š”๊ตฌํ•˜๋Š” ์‚ฌํ•ญ์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

 

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

 

์ด ๋•Œ ํ™œ์šฉํ•  ๋ฐฉ๋ฒ•์€ SET ์ด๋ผ๋Š” ๋ฌธ๋ฒ•์„ ์ด์šฉํ•ด ์ƒˆ๋กœ์šด ๋ณ€์ˆ˜๋ฅผ ํ• ๋‹นํ•ด์ฃผ๊ณ  ์„œ๋ธŒ์ฟผ๋ฆฌ๋ฅผ ์ด์šฉํ•˜๋ฉด ๋œ๋‹ค. SET์ด ๋ฌด์—‡์ธ์ง€, ์™œ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋Š”์ง€๋Š” ์—ฌ๊ธฐ๋ฅผ ์ฐธ๊ณ ํ•˜์ž.

 

์šฐ์„ ์€ ์ •๋‹ต์ธ ์ „์ฒด SQL ๊ตฌ๋ฌธ์„ ์‚ดํŽด๋ณด๊ณ  ์–ด๋–ค ์˜๋ฏธ๋ฅผ ๋‹ด๊ณ  ์žˆ๋Š”์ง€ ํ•˜๋‚˜ํ•˜๋‚˜์”ฉ ๋œฏ์–ด๋ณด์ž.

 

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

 

๊ฐ€์žฅ ์ค‘์š”ํ•˜๋‹ค๊ณ  ํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„์€ SET์„ ํ™œ์šฉํ•ด ์ƒˆ๋กœ์šด ์นผ๋Ÿผ์„ ๋งŒ๋“ค์–ด์ฃผ๋Š” ๊ฒƒ์ด๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋Š” ์ด์œ ๋Š” ์›๋ณธ ํ…Œ์ด๋ธ”์˜ DATETIME์ด 0์‹œ~23์‹œ๊นŒ์ง€ ์—ฐ์†์ ์œผ๋กœ ์žˆ๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ์ค‘๊ฐ„์— ๋ช‡๋ช‡ ๋น ์ ธ์žˆ๋Š” ์‹œ๊ฐ„๋Œ€๊ฐ€ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ๋”ฐ๋ผ์„œ ๋ฌธ์ œ์—์„œ ์š”๊ตฌํ•˜๋Š” ์—ฐ์†์ ์ธ [0,1,2,3, ..., 23] ์‹œ๊นŒ์ง€์˜ ๊ฐ’์„ ๋งŒ๋“ค์–ด์ฃผ์–ด์•ผ ํ–ˆ๋‹ค.

 

๋‹ค์Œ์œผ๋กœ ์ˆ˜ํ–‰ํ•œ ๊ตฌ๋ฌธ์„ ๋ณด์ž.

 

@HOUR := @HOUR + 1

์ด ๊ตฌ๋ฌธ์„ ์ง๊ด€์ ์œผ๋กœ ์ดํ•ดํ•˜๊ธฐ ์œ„ํ•ด Python ๋ฌธ๋ฒ•์„ ์˜ˆ๋ฅผ ๋“ค์–ด ๋ณธ๋‹ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์„ ์ˆ˜ ์žˆ๊ฒ ๋‹ค.

 

cnt = 0 
for n in range(0,10):
    print(n, end=' ')

 

๊ทธ๋ž˜์„œ ๋งŒ์•ฝ ๋‹ค์Œ๊ณผ ๊ฐ™์€ SQL ๊ตฌ๋ฌธ์„ ์‹คํ–‰ํ•˜๊ฒŒ ๋œ๋‹ค๋ฉด ANIMAL_OUTS ๋ผ๋Š” ํ…Œ์ด๋ธ”์˜ ํ–‰ ๊ฐœ์ˆ˜(N๊ฐœ)๋งŒํผ HOUR ๊ฐ’์ด [0, 1, 2, 3, ... , N-1] ๋กœ ์ด N๊ฐœ์˜ ๊ฐ’์ด ์ถœ๋ ฅ๋  ๊ฒƒ์ด๋‹ค.

 

SET @HOUR = -1;
SELECT @HOUR := @HOUR + 1 AS HOUR
FROM ANIMAL_OUTS

 

์ด์ œ ์ด๋ ‡๊ฒŒ SET์„ ์ด์šฉํ•ด ์ƒˆ๋กญ๊ฒŒ ๋งŒ๋“  HOUR์ด๋ผ๋Š” ๋ณ€์ˆ˜์™€ ANIMAL_OUTS์˜ DATETIME ๋ณ€์ˆ˜์˜ ์‹œ๊ฐ„(HOUR)๊ณผ ๋™์ผํ•œ ๊ฐ’์„ ๊ฐ–๋Š” ๋ฐ์ดํ„ฐ๋ฅผ COUNT ํ•˜๊ฒŒ ๋˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

 

SET @HOUR = -1;
SELECT @HOUR := @HOUR + 1 AS HOUR,
      (SELECT COUNT(*)
       FROM ANIMAL_OUTS
       WHERE @HOUR = HOUR(DATETIME))
FROM ANIMAL_OUTS

 

๋งˆ์ง€๋ง‰์œผ๋กœ 0์‹œ ~ 23์‹œ๊นŒ์ง€์˜ ๋ฐ์ดํ„ฐ๋งŒ ์ถœ๋ ฅํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— WHERE ์กฐ๊ฑด๋ฌธ์„ ์ถ”๊ฐ€ํ•ด์ฃผ์ž.

 

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

 

ํ•œ ๊ฐ€์ง€ ์ฃผ์˜ํ•ด์•ผ ํ•  ์ ์€ ๋งˆ์ง€๋ง‰ WHERE ์ ˆ์—์„œ '@HOUR' ์„ ์‚ฌ์šฉํ–ˆ๋‹ค๋Š” ์ ์ด๋‹ค. ๊ทธ๋ƒฅ 'HOUR' ์„ ์‚ฌ์šฉํ•˜๋ฉด ์•ˆ๋ ๊นŒ? ์•ˆ ๋œ๋‹ค. ์™œ๋ƒํ•˜๋ฉด 'HOUR' ์ด๋ผ๋Š” ๋ณ€์ˆ˜๋Š” SELECT ์ ˆ์—์„œ ์ƒˆ๋กญ๊ฒŒ ๋งŒ๋“ค์–ด์ง„ ์ƒˆ๋กœ์šด ์นผ๋Ÿผ๋ณ€์ˆ˜์ด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.(์ด๋Ÿฌํ•œ ์ฃผ์˜ ์‚ฌํ•ญ์„ ๊ธฐ์–ตํ•˜๊ณ  ์žˆ์œผ๋ฉด ๋‹ค๋ฅธ ๋ฌธ์ œ ํ’€์ด์— ๋งŽ์€ ๋„์›€์ด ๋œ๋‹ค.)

 

๊ทธ๋ž˜์„œ '@HOUR' ์„ ์‚ฌ์šฉํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— '23์‹œ ๊นŒ์ง€'์˜ ๊ฐ’์„ ์ถœ๋ ฅํ•˜๊ธฐ ์œ„ํ•ด '@HOUR < 23'์ด ๋œ๋‹ค. ์™œ๋ƒํ•˜๋ฉด '@HOUR' ์€ '@HOUR + 1'๋กœ ์žฌํ• ๋‹น ๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

 

@HOUR := @HOUR + 1

 

๋ฐ˜์‘ํ˜•