반응형

DB에서 날짜(시간)별 데이터 분류하기


최근 시간 관리 어플리케이션을 개발 중에 있는데, 데이터가 발생하면 현재시간과 함께 DB에 저장을 해왔습니다. 이제 이를 이용해서 기간 별 데이터 분석을 통해 그래프를 그리려고 하다보니 데이터 분류를 하는 작업이 생각보다 막막하더군요. 처음에는 안드로이드 자바에서 분류를 해야겠다는 생각을 했으나 워낙 JAVA가 날짜나 시간에 대해 지원하는 API가 별로라서... 다른 방법이 없을까 고민하던 중 서버(파이썬으로 구축)단에서 분류를 한 후에 클라이언트에 넘겨주는 방식을 선택하기로 했습니다.

그래서 오늘은 DB(MYSQL)에서 어떤 쿼리문으로 데이터를 분류를 하는지 알아보도록 하겠습니다.


특정 기간의 데이터 뽑아내기


TIME TABLE

 CATEGORY

AMOUNT

REGDATE 

사과 

2018-05-03 01:02:03 

망고 

2018-06-05 02:03:04 

바나나 

2018-07-07 03:04:05 

딸기 

2018-08-09 04:05:06 

 * REGDATE의 DATA TYPE은 DATETIME 입니다.


위와 같이 데이터 샘플이 DB에 있다고 했을 경우 6월 이상에 속하는 모든 데이터를 뽑아내는 쿼리문은 아래와 같습니다.


SELECT * FROM TIME WHERE REGDATE > "2018-06";


간단하지요? 저는 처음에 DATETIME에 저장되는 것이 "%y-%m-%d %H:%M:%S"의 형식으로 저장이 되길래 조건문에도 꼭 저장되는 것과 같은 형식으로 비교를 해주어야 한다고 생각을 했는데, 생각보다 DB가 똑똑하게(?) 보다 압축된 조건일지라도 잘 비교를 해줍니다. 단, 위의 예시의 경우 '>='이 아닌 '>'을 쓰고 있어 06월은 포함되지 않을 것 같지만 포함이 된다는 사실!


그렇다면 조금 더 활용하는 예시를 알아볼까요?


카테고리에 상관 없이 5월 2일과 6월 15일 사이에 있는 모든 AMOUNT 데이터의 합을 구하는 쿼리는 아래와 같습니다.

SELECT SUM(AMOUNT) FROM TIME WHERE REGDATE > "2018-05-02" AND REGDATE < "2018-06-15";


TIME TABLE에 있는 REGDATE 값 중 가장 오래전 데이터를 가져오는 쿼리는 아래와 같습니다.

SELECT MIN(REGDATE) FROM TIME;


이처럼 SUM(), MIN(), MAX() 등 MYSQL에서 지원하는 쿼리 함수들이 있으니 이를 잘 활용한다면 데이터베이스를 활용하는데 있어 더욱 편리함을 느끼실 수 있을 겁니다.


공감() 및 댓글은 Ready's tory에 큰 힘!이 됩니다

다음 번에 더더욱 유익한 컨텐츠로 찾아 뵐게요!

* 로그인 없이도 가능하답니다!


내가 주고 싶은 것이 아닌, 당신이 받고 싶은 것을 주겠습니다.

반응형
반응형