https://school.programmers.co.kr/learn/courses/30/lessons/59413
못풀었다. 너무 어려웠다.
그래서 다른 사람의 풀이를 참고했다.
# SET : 어떤 변수에 특정 값을 넣어줄 때 사용
# @은 변수명 앞에 넣어주며 이는 프로시저가 종료되어도 유지된다.
# := 은 비교연산자 =과 혼동을 피하기 위한 대입연산자이다.
SET @HOUR := -1;
# @HOUR에 1씩 증가시키며 SELECT문 전체를 실행한다.
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 함수 첨 써봤다.
내가 저런 문제 다시 만나도 풀 수 있을까?
그래도 복습은 해야지 어쩌겠냐.
낯선거지 어려운게 아니다. 살살 달래서 친해져보도록 노력하자.
하도 모르겠어서 유튜브 검색해봤더니 나오지 않아서
ChatGPT의 도움을 받았다.
쿼리의 실행 순서를 더 자세히 설명해드리겠습니다.
SET @HOUR := -1;
:
- 변수
@HOUR
을 선언하고 초기값을 -1로 설정합니다. 이 변수는 나중에 시간대를 나타내는 용도로 사용될 것입니다.FROM
절:
ANIMAL_OUTS
테이블에서 데이터를 가져옵니다. 이 테이블은 동물이 보호소를 나간 시간과 관련된 정보를 포함하고 있습니다.WHERE
절:
@HOUR
변수가 23보다 작을 때까지만 결과를 생성하도록 필터링합니다. 이것은 시간대가 0부터 22까지의 결과만 출력되도록 합니다.SELECT
절 (외부 쿼리):
@HOUR
변수를 1씩 증가시키면서 시간대별로 결과를 생성합니다.@HOUR
변수를 증가시키는 동시에,ANIMAL_OUTS
테이블의 각 행에 대해 아래의 하위 쿼리가 실행됩니다.- 하위 쿼리
(SELECT COUNT(*) FROM ANIMAL_OUTS WHERE HOUR(DATETIME) = @HOUR)
:
- 현재 시간대(
@HOUR
변수의 값)에 해당하는 동물이 나간 수를 계산합니다.HOUR(DATETIME)
는ANIMAL_OUTS
테이블의DATETIME
열에서 시간을 추출하는 함수입니다.- 결과 생성:
- 외부 쿼리의
SELECT
절에서 현재 시간대(@HOUR
)와 해당 시간대의 동물이 나간 수(COUNT
)를 출력합니다.- 반복:
@HOUR
변수를 1씩 증가시키면서 위의 단계들을 반복합니다.- 증가된
@HOUR
값으로 하위 쿼리가 다시 실행되며, 각 시간대별로 동물이 나간 수를 계산합니다.- 최종 결과:
- 시간대별로 동물이 나간 수를 계산한 결과가 출력됩니다.
결국 이 코드는 각 시간대별로 동물이 보호소를 나간 수를 계산하고 출력하는데, 이를 위해 변수를 사용하여 시간대를 추적하며 반복적으로 계산합니다.