테이블은 전체 테이블 모습을 출력한 사진으로 동물에 대한 정보를 담고있는 것을 알 수 있습니다.
"보호소에서는 몇 시에 입양이 가장 활발하게 일어나는지 알아보려 합니다. 0시부터 23시까지, 각 시간대별로 입양이 몇 건이나 발생했는지 조회하는 SQL문을 작성해주세요. 이때 결과는 시간대 순으로 정렬해야 합니다."
[TO-be]
HOUR COUNT
0 0
1 0
2 0
3 0
4 0
5 0
6 0
7 3
8 1
9 1
10 2
11 13
12 10
13 14
14 9
15 7
16 10
17 12
18 16
19 2
20 0
21 0
22 0
23 0
내가 처음 제출한 답안
SELECT HOUR(DATETIME) AS HOUR, COUNT(DATETIME)
FROM ANIMAL_OUTS
GROUP BY HOUR(DATETIME)
ORDER BY HOUR(DATTIME)
[시행결과]
HOUR COUNT(DATETIME)
7 3
8 1
9 1
10 2
11 13
12 10
13 14
14 9
15 7
16 10
17 12
18 16
19 2
이 데이터베이스에는 없는 시간까지해서 0부터 23시까지를 만들어야하는것이다. 따라서, 0부터 23시까지의 테이블을 먼저 만들어 주어야한다.
SET은 어떤 변수에 특정 값을 할당할 때 쓰는 명령어
SET @HOUR = -1;
SELECT (@HOUR := @HOUR +1) AS HOUR
FROM ANIMAL_OUTS
WHERE @HOUR < 23;
[설명]
1) SET함수의 경우 어떠한 변수에 특정한 값을 넣어줄 때 사용한다.
@는 변수명 앞에 넣어주어야 한다. 즉, @HOUR = -1이라는 것은 HOUR변수에 -1을 넣어준다는 뜻이다.
2) 다음으로 := 기호는 대입해주다는 뜻이다. 즉 HOUR변수에 HOUR +1을 대입해준다는 뜻이다. 즉, 기존 HOUR변수는 -1인데 그 HOUR변수를 +1로 대입해준다는 뜻으로 0이되고 또 0이 +1로 대입되어 1이 되면서 WHERE절인 23미만일때까지 대입되어 HOUR이 22 가 될때 멈추며 22는 22+1 인 23이 된다.
3) 이렇게 하면 0부터 23까지의 테이블이 완성이 되는것이다.
[결과]
HOUR
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
SET @HOUR = -1;
SELECT (@HOUR := @HOUR +1) AS HOUR,
(SELECT COUNT(HOUR(DATETIME))
FROM ANIMAL_OUTS
WHERE HOUR(DATETIME)=@HOUR) AS COUNT
FROM ANIMAL_OUTS
WHERE @HOUR < 23;
- HOUR 변수를 -1로 선언하여 22까지 +1씩 더해줌, -1부터 더했기 때문에 0부터 23까지 생성된다.
- ANIMAL_OUTS 테이블에 있는 DATETIME변수와 @HOUR변수가 동일한 순간 카운트를 진행한다.
[결과]
HOUR COUNT
0 0
1 0
2 0
3 0
4 0
5 0
6 0
7 3
8 1
9 1
10 2
11 13
12 10
13 14
14 9
15 7
16 10
17 12
18 16
19 2
20 0
21 0
22 0
23 0