SQL 고득점 Kit문제를 SELECT부터 쭉 풀다가 모르는 부분이 나왔다.
HOUR(DATETIME)
을 했을 때, 시간대가 7시부터 19시까지 밖에 없는데 출력은 0시부터 23시까지 해야된다. 이 부분을 고민해보다가 검색해봤다.
결론은 SET
명령어를 사용하는 것이다. 그리고 SELECT문에 서브쿼리를 이용하여 입양건수를 카운트한다.
SET
명령어 : 현재 시스템 변수의 값을 변경하기 위한 명령어- DML(데이터 조작어)에서
UPDATE
명령어와 함께 데이터를 수정하는데 쓰인다.UPDATE tableName SET column1 = value1, column2 = value2, ... WHERE search-condition ...
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 @HOUR := -1;
로 변수를 초기화 해줄때 @
를 붙이게 되면 프로시저가 끝나도 계속 값이 유지되어 @HOUR := @HOUR + 1
에서 마치 for문 처럼 WHERE @HOUR < 23
조건이 False가 될 때 까지 이전 값을 불러와 계속 1을 더해 주게된다.
'@'에 대한 stack overflow참고