[GROUP BY] 입양 시각 구하기(2)

2022. 5. 21. 00:08·SQL/프로그래머스

문제설명

 

풀이과정

입양 시각 구하기(1)처럼 쿼리를 짜면 0~6시 까지의 결과가 출력되지 않는 문제가 발생한다.

이런 경우, 0~6시 까지의 데이터를 따로 생성해야 하기 때문에 SET(로컬변수) 명령어를 사용해서 문제를 풀어나가야 한다.

 

SET?

 

SQL SET

W3Schools offers free online tutorials, references and exercises in all the major languages of the web. Covering popular subjects like HTML, CSS, JavaScript, Python, SQL, Java, and many, many more.

www.w3schools.com

 

정답

SET @HOUR = -1; --변수 선언

SELECT (@HOUR := @HOUR +1) AS HOUR,
    (SELECT COUNT(HOUR(DATETIME)) -- 서브쿼리
    FROM ANIMAL_OUTS 
    WHERE HOUR(DATETIME)=@HOUR) AS COUNT 
FROM ANIMAL_OUTS
WHERE @HOUR < 23;

SET 옆에 변수명과 초기값을 설정할 수 있다.

- @가 붙은 변수는 프로시저가 종료되어도 유지된다

- 이를 통해 값을 누적하여 0부터 23까지 표현할 수 있음

 

@HOUR은 초기값을 -1로 설정합니다. 

PL/-SQL 문법에서 :=은 비교연산자 =과 혼동을 피하기 위한 대입 연산입니다.

 

SELECT(@HOUR := @HOUR + 1)은 @HOUR의 값에 1씩 증가시키면서 SELECT문 전체를 실행하게 됩니다

 

이 때 처음에 @HOUR 값이 -1인데, 이 식에 의해 +1이 되어 0이 저장됩니다

- HOUR 값이 0부터 시작할 수 있습니다.

- WHERE @HOUR<23일 때 까지, @HOUR값이 계속 1씩 증가합니다. 

 

한 가지 주의해야 할 점은 마지막 WHERE 절에서 '@HOUR' 을 사용했다는 점이다. 그냥 'HOUR' 을 사용하면 안될까? 안 된다. 왜냐하면 'HOUR' 이라는 변수는 SELECT 절에서 새롭게 만들어진 새로운 칼럼변수이기 때문이다.(이러한 주의 사항을 기억하고 있으면 다른 문제 풀이에 많은 도움이 된다.)

 

그래서 '@HOUR' 을 사용했기 때문에 '23시 까지'의 값을 출력하기 위해 '@HOUR < 23'이 된다. 왜냐하면 '@HOUR' 은 '@HOUR + 1'로 재할당 되었기 때문이다.

 

@HOUR := @HOUR +1

 

참고한 블로그 

 

 

[프로그래머스] 입양 시각 구하기(1), (2) (GROUP BY, HAVING, SET)

[프로그래머스] 입양 시각 구하기(1), (2)

chanhuiseok.github.io

 

[SQL] MySQL - SET 과 서브쿼리 사용하기

🔊 본 포스팅에서 사용되는 테이블의 자료와 출처는 프로그래머스임을 밝힙니다. 더 다양한 SQL 문제를 풀어보시려면 프로그래머스 사이트를 방문해보세요! 이번 포스팅에서 소개할 SQL 구문은

techblog-history-younghunjo1.tistory.com

 

'SQL > 프로그래머스' 카테고리의 다른 글

[JOIN] 있었는데요 없었습니다  (0) 2022.05.22
[JOIN] 없어진 기록 찾기  (0) 2022.05.21
[GROUP BY] 입양 시각 구하기(1)  (0) 2022.05.20
[GROUP BY] 동명 동물 수 찾기  (0) 2022.05.20
[GROUP BY]고양이와 개는 몇 마리 있을까?  (0) 2022.05.20
'SQL/프로그래머스' 카테고리의 다른 글
  • [JOIN] 있었는데요 없었습니다
  • [JOIN] 없어진 기록 찾기
  • [GROUP BY] 입양 시각 구하기(1)
  • [GROUP BY] 동명 동물 수 찾기
소금깨
소금깨
  • 소금깨
    고군분투 인생살이
    소금깨
  • 전체
    오늘
    어제
    • 분류 전체보기 (328)
      • SQL (271)
        • 프로그래머스 (27)
        • LeetCode (198)
        • Hacker Rank (27)
        • Solve SQL (1)
        • 개념 (15)
      • 데이터 분석 (16)
        • 참고하며 공부하기 (14)
      • 기타 (15)
        • 통계 (14)
      • 오류 (6)
      • 인생살이 (0)
        • 리뷰 (0)
        • 일기 (0)
      • 中文 (0)
      • TABLEAU (3)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    패캠챌린지
    group by
    medium
    Hard
    easy
    패스트캠퍼스후기
    파이썬을활용한시계열데이터분석AtoZ올인원패키지Online
    HACKER_RANK
    solvesql
    LeetCode
    시계열데이터분석
    해커랭크
    MySQL
    직장인자기계발
    파이썬을활용한시계열데이터분석
    프리미엄
    패스트캠퍼스
    직장인인강
    프로그래머스
    SQL
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
소금깨
[GROUP BY] 입양 시각 구하기(2)
상단으로

티스토리툴바