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이 된다.
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
'Programming > DataBase' 카테고리의 다른 글
MYSQL 날짜 형변환 과 데이터가 없어도 날짜 출력하는 방법 (0) | 2021.08.04 |
---|