๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿงฉ ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค/์•Œ๊ณ ๋ฆฌ์ฆ˜ ํ’€์ด(SQL)

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

by carrot0911 2024. 11. 12.

๋ฌธ์ œ ์„ค๋ช…

https://school.programmers.co.kr/learn/courses/30/lessons/59412

 

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

SW๊ฐœ๋ฐœ์ž๋ฅผ ์œ„ํ•œ ํ‰๊ฐ€, ๊ต์œก, ์ฑ„์šฉ๊นŒ์ง€ Total Solution์„ ์ œ๊ณตํ•˜๋Š” ๊ฐœ๋ฐœ์ž ์„ฑ์žฅ์„ ์œ„ํ•œ ๋ฒ ์ด์Šค์บ ํ”„

programmers.co.kr

ANIMAL_OUTS ํ…Œ์ด๋ธ”์€ ๋™๋ฌผ ๋ณดํ˜ธ์†Œ์—์„œ ์ž…์–‘ ๋ณด๋‚ธ ๋™๋ฌผ์˜ ์ •๋ณด๋ฅผ ๋‹ด์€ ํ…Œ์ด๋ธ”์ž…๋‹ˆ๋‹ค. ANIMAL_OUTS ํ…Œ์ด๋ธ” ๊ตฌ์กฐ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์œผ๋ฉฐ, ANIMAL_IDANIMAL_TYPEDATETIMENAMESEX_UPON_OUTCOME๋Š” ๊ฐ๊ฐ ๋™๋ฌผ์˜ ์•„์ด๋””, ์ƒ๋ฌผ ์ข…, ์ž…์–‘์ผ, ์ด๋ฆ„, ์„ฑ๋ณ„ ๋ฐ ์ค‘์„ฑํ™” ์—ฌ๋ถ€๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.

NAME TYPE NULLABLE
ANIMAL_ID VARCHAR(N) FALSE
ANIMAL_TYPE VARCHAR(N) FALSE
DATETIME DATETIME FALSE
NAME VARCHAR(N) TRUE
SEX_UPON_OUTCOME VARCHAR(N) FALSE

๋ฌธ์ œ

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

์˜ˆ์‹œ

SQL๋ฌธ์„ ์‹คํ–‰ํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋‚˜์™€์•ผ ํ•ฉ๋‹ˆ๋‹ค.

HOUR COUNT
9 1
10 2
11 13
12 10
13 17
14 9
15 7
16 10
17 12
18 16
19 2


๋‚ด๊ฐ€ ์ž‘์„ฑํ•œ ์ฝ”๋“œ

SELECT 
    CASE
        WHEN HOUR(DATETIME) >= 7 AND HOUR(DATETIME) < 8 THEN '7'
        WHEN HOUR(DATETIME) >= 8 AND HOUR(DATETIME) < 9 THEN '8'
        WHEN HOUR(DATETIME) >= 9 AND HOUR(DATETIME) < 10 THEN '9' 
        WHEN HOUR(DATETIME) >= 10 AND HOUR(DATETIME) < 11 THEN '10'
        WHEN HOUR(DATETIME) >= 11 AND HOUR(DATETIME) < 12 THEN '11'
        WHEN HOUR(DATETIME) >= 12 AND HOUR(DATETIME) < 13 THEN '12'
        WHEN HOUR(DATETIME) >= 13 AND HOUR(DATETIME) < 14 THEN '13'
        WHEN HOUR(DATETIME) >= 14 AND HOUR(DATETIME) < 15 THEN '14'
        WHEN HOUR(DATETIME) >= 15 AND HOUR(DATETIME) < 16 THEN '15'
        WHEN HOUR(DATETIME) >= 16 AND HOUR(DATETIME) < 17 THEN '16'
        WHEN HOUR(DATETIME) >= 17 AND HOUR(DATETIME) < 18 THEN '17'
        WHEN HOUR(DATETIME) >= 18 AND HOUR(DATETIME) < 19 THEN '18'
        WHEN HOUR(DATETIME) >= 19 AND HOUR(DATETIME) < 20 THEN '19'
    END AS HOUR, count(*) AS COUNT
FROM ANIMAL_OUTS
GROUP BY HOUR
HAVING HOUR >= 9 AND HOUR < 20
ORDER BY HOUR(DATETIME) ASC;

์ฝ”๋“œ ์„ค๋ช…

  • SELECT CASE : ๊ฐ๊ฐ์˜ ์กฐ๊ฑด์— ๋”ฐ๋ผ ๊ฐ’์„ ์ €์žฅํ•œ๋‹ค.
    • WHEN HOUR(DATETIME) >= 7 AND HOUR(DATETIME) < 8 THEN '7' : 7 ์ด์ƒ 8 ๋ฏธ๋งŒ์ธ ์‹œ๊ฐ„์„ 7๋กœ ์ €์žฅํ•œ๋‹ค.
    • END AS HOUR, count(*) AS COUNT : ์„ค์ •ํ•œ ์‹œ๊ฐ„์˜ ์ปฌ๋Ÿผ๋ช…์„ HOUR๋กœ ์„ค์ •ํ•˜๊ณ  ์‹œ๊ฐ„๋ณ„ ์ž…์–‘๊ฑด์ˆ˜์— ๋Œ€ํ•œ ์ปฌ๋Ÿผ๋ช…์„ COUNT๋กœ ์„ค์ •ํ•œ๋‹ค.
  • FROM ANIMAL_OUTS : ANIMAL_OUTS ํ…Œ์ด๋ธ”์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜จ๋‹ค.
  • GROUP BY HOUR : HOUR ์ปฌ๋Ÿผ์„ ๊ธฐ์ค€์œผ๋กœ ๊ทธ๋ฃนํ™”ํ•œ๋‹ค.
  • HAVING HOUR >= 9 AND HOUR < 20 : ๊ทธ๋ฃนํ™”ํ•  ๋•Œ 9 ์ด์ƒ 20 ๋ฏธ๋งŒ์ธ ๊ฐ’๋“ค๋งŒ ๊ฐ๊ฐ ๊ทธ๋ฃนํ™”ํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜จ๋‹ค.
  • ORDER BY HOUR(DATETIME) ASC : HOUR์˜ ์‹œ๊ฐ„ ๊ฐ’์„ ๊ธฐ์ค€์œผ๋กœ ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌํ•œ๋‹ค.