https://school.programmers.co.kr/learn/courses/30/lessons/59413
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
입양 시각 구하기 (2) 문제의 풀이 과정 중 하나로 다음과 같은 sql 문을 발견했다.
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
@ 붙여서 쓰는건 처음봐서 알아봤더니 세션 변수라는 것이었다.
이는 사용자 정의 변수로, SQL 세션 내에서 값을 저장하고 재사용할 수 있는 기능을 제공한다.
@변수명 형태로 선언하고 사용할 수 있으며, 한 쿼리 내에서 값을 설정하고 그 값을 다른 쿼리에서 참조하는 데 사용할 수 있다.
특징
- 하나의 세션 동안 유효하며, 쿼리 내에서 값을 저장하고 사용할 수 있다.
- 값 할당 : := 를 사용하여 값을 할당한다. 예를 들어 SET @HOUR := -1 는 @HOUR 에 -1을 할당한다는 뜻이다.
- 재사용 : 세션 변수를 사용하여 쿼리 실행 도중에도 값을 저장하고 재사용할 수 있다. 이는 루프나 복잡한 계산을 수행할 때 유용하다.
위의 특징을 바탕으로 sql 문을 분석해보면,
- @HOUR 의 값을 1씩 증가시키며 각 행의 HOUR 필드를 하나씩 증가시킨다.
- 내부 서브쿼리는 DATETIME 필드에서 시간(HOUR) 부분이 @HOUR 와 일치하는 행의 개수를 계산한다.
- @HOUR가 23보다 작은, 즉 0부터 23시까지 각 시간에 해당하는 데이터의 개수를 반환한다.
'내배캠 > TIL' 카테고리의 다른 글
MyBatis 란? (1) | 2024.09.27 |
---|---|
세션 (Session) (0) | 2024.09.24 |
[SQL] 오프라인/온라인 판매 데이터 통합하기 (1) | 2024.09.14 |
트랜잭션 격리 수준 (0) | 2024.09.12 |
[스프링] 테스트 (1) | 2024.09.11 |