- 보호소에서는 몇 시에 입양이 가장 활발하게 일어나는지 알아보려 합니다. 0시부터 23시까지, 각 시간대별로 입양이 몇 건이나 발생했는지 조회하는 SQL문을 작성해주세요. 이때 결과는 시간대 순으로 정렬해야 합니다.
SELECT hour(datetime) AS HOUR, count(datetime) as COUNT from animal_outs group by HOUR ORDER BY HOUR
문제 예시에는 시간이 0~23시까지 나와있다. 0개의 카운트도 세어야 하기 때문에 위 쿼리는 맞지 않다. 역시 구글링 ㄱㄱ
이 문제의 핵심
SET사용자 정의 변수SET @변수이름 := 대입값 ; SELECT @변수이름 := 대입값 ; # SET 이외의 명령문에서는 =가 비교연산자로 취급되기 때문에 # SELECT로 변수를 선언하고 값을 대입할 때는 :=를 사용한다. --SET 사용법 SET @start := 15, @fisnish = 20 ; 또는 SELECT @start := 15, @finish :=20 ; SELECT * FROM table WHERE id BETWEEN @start AND @finish ;
대입해 다시 풀어보자.
# SQL 변수 사용
# SET @s(변수이름) = 대입값 ;
# SELECT @f(변수이름) = 대입값 ;
# SELCT * FROM WHERE BETWEEN @변수값 AND @f ;
#변수선언
SET @hour := -1 ; # --변수선언
#-1부터 넣고 0부터 23까지 출력 후 종료
# COUNT함수로 시간별 조회
SELECT
(@hour := @hour + 1) AS HOUR,
#select의 서브쿼리로 카운트해주기
#datetime의 hour와 변수(@hour)이 같은 것만 count한다.
(SELECT COUNT(*)
FROM ANIMAL_OUTS
WHERE HOUR(DATETIME) = @hour) AS COUNT
FROM ANIMAL_OUTS
WHERE @hour < 23 ;
변수를 선언하는 것,
하나씩 +1을 해주는 것
count를 해주는 것 모두 나에게는 어려운 구문이었다.
좀 더 많은 예제를 통해 복습해나가야 겠다.