[프로그래머스 SQL 고득점 Kit] GROUP BY

draidev·2022년 2월 23일
0

프로그래머스>GROUP BY


입양 시각 구하기(2)

SQL 고득점 Kit문제를 SELECT부터 쭉 풀다가 모르는 부분이 나왔다.
HOUR(DATETIME)을 했을 때, 시간대가 7시부터 19시까지 밖에 없는데 출력은 0시부터 23시까지 해야된다. 이 부분을 고민해보다가 검색해봤다.
결론은 SET명령어를 사용하는 것이다. 그리고 SELECT문에 서브쿼리를 이용하여 입양건수를 카운트한다.

  • SET 명령어 : 현재 시스템 변수의 값을 변경하기 위한 명령어
  • DML(데이터 조작어)에서 UPDATE명령어와 함께 데이터를 수정하는데 쓰인다.
    UPDATE  tableName
       SET  column1 = value1,
       		column2 = value2, ...
	 WHERE  search-condition ... 

입양 시각 구하기(2) 코드

SET @HOUR := -1;

SELECT  (@HOUR := @HOUR + 1) AS HOUR 
        ,(
          SELECT  COUNT(*) 
            FROM  ANIMAL_OUTS
           WHERE  @HOUR = HOUR(DATETIME)
         ) AS COUNT
  FROM  ANIMAL_OUTS
 WHERE  @HOUR < 23;

SET @HOUR := -1;로 변수를 초기화 해줄때 @를 붙이게 되면 프로시저가 끝나도 계속 값이 유지되어 @HOUR := @HOUR + 1에서 마치 for문 처럼 WHERE @HOUR < 23조건이 False가 될 때 까지 이전 값을 불러와 계속 1을 더해 주게된다.
'@'에 대한 stack overflow참고

profile
I trust myself.

0개의 댓글

Powered by GraphCDN, the GraphQL CDN