728x90
0시부터 23시까지 시간대 별로 입양이 몇 건이 발생했는지 조회해야 한다.
실제 테이블에는 9시부터 17시까지의 기록밖에 없기 때문에 쿼리문에서 로컬 변수를 활용해야 한다.
SET @hour := -1;
SELECT (@hour := @hour + 1) as HOUR,
(SELECT COUNT(*) FROM ANIMAL_OUTS WHERE HOUR(DATETIME) = @hour) AS COUNT
FROM ANIMAL_OUTS
WHERE @hour < 23;
1. SET @변수명 := 초기값; 으로 변수를 선언한다.
@가 붙은 변수는 프로시저가 종료되어도 유지된다.
2. SELECT (@hour := @hour + 1) 은 @hour을 1씩 증가하며 전체 SELECT 문을 실행하며 WHERE 문으로 인해 @hour < 23 일때까지 계속 @hour의 값이 증가한다.
3. DATETIME의 HOUR이 @hour가 같은 경우에만 COUNT를 HOUR에 조인한다.
로컬 변수 사용 문제는 처음이라 다른 사람들의 풀이를 참고했다.
'데이터베이스' 카테고리의 다른 글
DB 커넥션 풀 (Connection Pool) (1) | 2023.11.04 |
---|---|
[PostgreSQL] dual 과 같은 기능 사용하기 (0) | 2022.07.25 |
[Oracle] 오라클로 LIMIT 구현 하기 (0) | 2022.03.16 |
[프로그래머스] NULL 처리하기 (0) | 2021.11.28 |
[SQL] WHERE 과 HAVING 의 차이 (0) | 2021.11.27 |