[프로그래머스/SQL] (Lv.4) 입양 시각 구하기(2) (MySQL)

0

코딩테스트

목록 보기
35/37
post-thumbnail

문제

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의 도움을 받았다.

쿼리의 실행 순서를 더 자세히 설명해드리겠습니다.

  1. SET @HOUR := -1;:
    • 변수 @HOUR을 선언하고 초기값을 -1로 설정합니다. 이 변수는 나중에 시간대를 나타내는 용도로 사용될 것입니다.
  2. FROM 절:
    • ANIMAL_OUTS 테이블에서 데이터를 가져옵니다. 이 테이블은 동물이 보호소를 나간 시간과 관련된 정보를 포함하고 있습니다.
  3. WHERE 절:
    • @HOUR 변수가 23보다 작을 때까지만 결과를 생성하도록 필터링합니다. 이것은 시간대가 0부터 22까지의 결과만 출력되도록 합니다.
  4. SELECT 절 (외부 쿼리):
    • @HOUR 변수를 1씩 증가시키면서 시간대별로 결과를 생성합니다.
    • @HOUR 변수를 증가시키는 동시에, ANIMAL_OUTS 테이블의 각 행에 대해 아래의 하위 쿼리가 실행됩니다.
  5. 하위 쿼리 (SELECT COUNT(*) FROM ANIMAL_OUTS WHERE HOUR(DATETIME) = @HOUR):
    • 현재 시간대(@HOUR 변수의 값)에 해당하는 동물이 나간 수를 계산합니다.
    • HOUR(DATETIME)ANIMAL_OUTS 테이블의 DATETIME 열에서 시간을 추출하는 함수입니다.
  6. 결과 생성:
    • 외부 쿼리의 SELECT 절에서 현재 시간대(@HOUR)와 해당 시간대의 동물이 나간 수(COUNT)를 출력합니다.
  7. 반복:
    • @HOUR 변수를 1씩 증가시키면서 위의 단계들을 반복합니다.
    • 증가된 @HOUR 값으로 하위 쿼리가 다시 실행되며, 각 시간대별로 동물이 나간 수를 계산합니다.
  8. 최종 결과:
    • 시간대별로 동물이 나간 수를 계산한 결과가 출력됩니다.
      결국 이 코드는 각 시간대별로 동물이 보호소를 나간 수를 계산하고 출력하는데, 이를 위해 변수를 사용하여 시간대를 추적하며 반복적으로 계산합니다.
profile
두둥탁 뉴비등장

0개의 댓글