Programming/DataBase

MYSQL 쿼리문 통계(일간/주간/월간/기간별), DATE_FORMAT() 알아보기

MySQL 쿼리문(일간/주간/월간/기간별)

// 일간통계
SELECT DATE(`날짜컬럼`) AS `date`,
       sum(`value`)
FROM test_st
GROUP BY `date`;

// 주간통계
SELECT DATE_FORMAT(DATE_SUB(`날짜컬럼`, INTERVAL (DAYOFWEEK(`날짜컬럼`)-1) DAY), '%Y/%m/%d') as start,
       DATE_FORMAT(DATE_SUB(`날짜컬럼`, INTERVAL (DAYOFWEEK(`날짜컬럼`)-7) DAY), '%Y/%m/%d') as end,
       DATE_FORMAT(`날짜컬럼`, '%Y%U') AS `date`,
       sum(`value`)
FROM test_st
GROUP BY date;

// 월간통계
SELECT MONTH(`날짜컬럼`) AS `date`,
       sum(`value`)
FROM test_st
GROUP BY `date`;

// 기간별 통계
SELECT DATE(`날짜컬럼`) AS `date`,
       sum(`value`)
FROM test_st
WHERE DATE(`날짜컬럼`) >= STR_TO_DATE('2017-04-01', '%Y-%m-%d')
   AND DATE(`날짜컬럼`) <= STR_TO_DATE('2017-04-10', '%Y-%m-%d')
GROUP BY `date`;

STR_TO_DATE(str, format)

   - DATE_FORMAT() 의 반대

   - format 문자열이 날짜와 시간을 모두 포함하고 있다면 DATETIME 값을 반환한다.

     그렇지 않고 날짜나 시간 둘 중 한 부분만을 포함한다면 DATE 또는 TIME 값을 반환한다.

DATE_FORMAT(date, format)

   - format 문자열에 따라 date 값을 형식화한다. 

 

DATE_ADD(date, INTERVAL expr type) , DATE_SUB(date, INTERVAL expr type)
   - date 는 시작 날짜를 지정하는 DATETIME 또는 DATE 값이다.

   - expr 는 시작 날짜로부터 더하거나 뺀 간격 값을 지정하는 표현이다. expr 는 문자열이다. 마이너스('-')로 시작될 수도 있다.

   - type 는 어떻게 해석할지를 지정하는 키워드이다.

   - INTERVAL 키워드와 type 지정자는 대소문자를 구분하지 않는다.


 ** 기형적인 날짜를 입력하면 결과는 NULL이 된다.

 

날짜 format  문자열 (좌) / INTERVAL TYPE

GROUP BY

 

특정 컬럼을 그룹화 하는 GROUP BY

특정 컬럼을 그룹화한 결과에 조건을 거는 HAVING

 

* WHERE는 그룹화 하기 전, HAVING은 그룹화 후에 적용되는 조건

 

// 컬럼 그룹화
SELECT 컬럼 FROM 테이블 GROUP BY 그룹화할 컬럼;

// 조건 처리 후에 컬럼 그룹화 후에 조건 처리
SELECT 컬럼 FROM 테이블 WHERE 조건식 GROUP BY 그룹화할 컬럼 HAVING 조건식;

// ORDER BY가 존재하는 경우
SELECT 컬럼 FROM 테이블 [WHERE 조건식]
GROUP BY 그룹화할 컬럼 [HAVING 조건식] ORDER BY 컬럼1 [, 컬럼2, 컬럼3 ...];

 

 


출처 👇👇👇

더보기

MySQL - 일간/주간/월간/기간별 통계

https://bluexmas.tistory.com/626

 

MySQL DATE_FORMAT() 

https://mindols.tistory.com/89

 

MySQL DATE 관련 함수 

https://linuxism.ustd.ip.or.kr/510