Database/MySQL

[Programmers/MySQL] 데이터가 없는 날짜/시간은 0으로 처리하기

2023. 2. 10. 19:43

문제 

https://school.programmers.co.kr/learn/courses/30/lessons/59413

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

풀이 

0~23시까지의 결과가 나오기 위해선 특정시간에 없는 데이터는 0으로 처리되어야한다. 

일반적으로 GROUP BY HOUR를 한다면 데이터가 있는 시간만 결과로 나올 것이기 때문이다. 

 

SQL 초보라 그런지 어떻게 해야할지 감이 안잡혀 다른 사람들의 풀이방법을 참고해보았다.

 

1. SET 사용

SET을 이용해 새로운 변수를 할당해주고 서브쿼리를 이용한다. 

원본테이블의 DATETIME은 0시부터 23시까지 연속적으로 있지 않고 중간에 빠져있는 시간대가 있다.

따라서 SET을 사용하여 [0,1,2,3,...,23] 의 값이 있는 새로운 Colunm을 만들어줘야 한다. 

 

다음 구문을 통해 ANIMAL_OUTS 테이블의 행 개수(N)만큼 HOUR 값이 [0,1,2,...,N-1]로 총 N개의 값이 출력될 것이다.

SET @HOUR = -1;
SELECT @HOUR := @HOUR + 1 AS HOUR
FROM ANIMAL_OUTS

?  여기서 드는 의문은 총 테이블의 행 개수 23개가 안된다면 만약 15개이면 0~14시까지만 가능할 것이다. 그렇다면 행 개수를 사용하여 연속적인 값을 만드는 것이 의미가 있는걸까. 

! MySQL 변수 선언 방법

  • SET @변수명 := '값'; 

이제 SET을 이용해 만든 HOUR 변수와 ANIMAL_OUTS의 DATETIME 변수의 시간과 동일한 값을 갖는 데이터를 COUNT 하면 된다.

마지막으로 0시~23시까지의 데이터만 출력해야하기 위해 WHERE 조건문을 추가한다.

*주의 사항

마지막 WHERE절에서 '@HOUR'을 사용해야한다. 'HOUR'변수는 SELECT절에서 새롭게 만들어진 칼럼변수이기 때문이다.

'@HOUR'은 '@HOUR + 1'로 재할당 되어 23이 되기 때문에 '@HOUR < 23' 을 해주는 것이다. 

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

출처: https://techblog-history-younghunjo1.tistory.com/146 

 

'Database > MySQL' 카테고리의 다른 글

[Programmers/MySQL]대여 횟수가 많은 자동차들의 월별 대여 횟수 구하기  (2) 2023.02.16
[MySQL] NULL 처리  (0) 2023.02.14
[Programmers/MySQL] TRUNCATE() 와 ROUND()  (0) 2023.02.10
[Programmers/MySQL] HAVING, 날짜 관련 함수에 대해  (0) 2023.02.10
[Programmers/MySQL] UNION ALL에 대해  (0) 2023.02.09
'Database/MySQL' 카테고리의 다른 글
  • [MySQL] NULL 처리
  • [Programmers/MySQL] TRUNCATE() 와 ROUND()
  • [Programmers/MySQL] HAVING, 날짜 관련 함수에 대해
  • [Programmers/MySQL] UNION ALL에 대해
flozl
flozl
차근 차근
flozl
@flozl 개발 블로그
flozl
  • 분류 전체보기 (39)
    • Projects (7)
      • capstone design (4)
      • mobile system (3)
    • 코딩테스트 (5)
    • 2022 K Data 청년 캠퍼스 (12)
      • ML&DL (8)
      • Python (1)
      • Big Data (2)
      • project (1)
    • Database (10)
      • MySQL (10)
    • Data Structure (1)
    • Algorithm (0)
    • Linux (0)
    • Books (0)
      • System Design Interview (0)
    • Python (2)

블로그 메뉴

  • 홈
  • Github

최근 글

hELLO · Designed By 정상우.
flozl
[Programmers/MySQL] 데이터가 없는 날짜/시간은 0으로 처리하기
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.