SQL_코드카타(2024.01.08) SET, @ 변수(어렵다)

김수경·2024년 1월 8일

코드카타

목록 보기
14/29
  1. 보호소에서는 몇 시에 입양이 가장 활발하게 일어나는지 알아보려 합니다. 0시부터 23시까지, 각 시간대별로 입양이 몇 건이나 발생했는지 조회하는 SQL문을 작성해주세요. 이때 결과는 시간대 순으로 정렬해야 합니다.
SELECT hour(datetime) AS HOUR,
count(datetime) as COUNT
from animal_outs 
group by HOUR
ORDER BY HOUR

문제 예시에는 시간이 0~23시까지 나와있다. 0개의 카운트도 세어야 하기 때문에 위 쿼리는 맞지 않다. 역시 구글링 ㄱㄱ

이 문제의 핵심

  • 변수선언(set)
  • @활용(@가 붙는 변수는 프로시저가 종료되어도 유지된다)
  • SELECT 구문에 서브쿼리 쓰기

SET 사용자 정의 변수

SET @변수이름 := 대입값 ;
SELECT @변수이름 := 대입값 ; 
# SET 이외의 명령문에서는 =가 비교연산자로 취급되기 때문에
# SELECT로 변수를 선언하고 값을 대입할 때는 :=를 사용한다.
--SET 사용법
SET @start := 15, @fisnish = 20 ; 
또는 
SELECT @start := 15, @finish :=20 ; 
SELECT * FROM table WHERE id BETWEEN @start AND @finish ; 

대입해 다시 풀어보자.

# SQL 변수 사용
# SET @s(변수이름) = 대입값 ; 
# SELECT @f(변수이름) = 대입값 ; 
# SELCT * FROM WHERE BETWEEN @변수값 AND @f ; 


#변수선언
SET @hour := -1 ; # --변수선언

#-1부터 넣고 0부터 23까지 출력 후 종료
# COUNT함수로 시간별 조회
SELECT
    (@hour := @hour + 1) AS HOUR,
#select의 서브쿼리로 카운트해주기
#datetime의 hour와 변수(@hour)이 같은 것만 count한다.
    (SELECT COUNT(*)
    FROM ANIMAL_OUTS
    WHERE HOUR(DATETIME) = @hour) AS COUNT
FROM ANIMAL_OUTS 
WHERE @hour < 23 ;

변수를 선언하는 것,
하나씩 +1을 해주는 것
count를 해주는 것 모두 나에게는 어려운 구문이었다.
좀 더 많은 예제를 통해 복습해나가야 겠다.

profile
잘 하고 있는겨?

0개의 댓글