[프로그래머스] 입양시각 구하기(2)

🌹Haeri Lee·2022년 3월 8일
0

[MySql] 문제풀이

목록 보기
3/15
post-custom-banner

[문제]

테이블은 전체 테이블 모습을 출력한 사진으로 동물에 대한 정보를 담고있는 것을 알 수 있습니다.

"보호소에서는 몇 시에 입양이 가장 활발하게 일어나는지 알아보려 합니다. 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시까지의 테이블을 먼저 만들어 주어야한다.

1) SET 명령어 사용

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

2) COUNT 진행

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
profile
안녕하세요 공부한 내용을 기록하기 위해서 시작했습니다.
post-custom-banner

0개의 댓글