您好,登錄后才能下訂單哦!
今天小編給大家分享一下MySQL怎么按天分組統計一定時間內的數據的相關知識點,內容詳細,邏輯清晰,相信大部分人都還太了解這方面的知識,所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。
如果能每天都有數據,可以直接使用最簡單的查詢節省時間。
要能夠展示每天的日期就要創建一張日期虛擬表作為連接表。
要使每天數據不為null,使用IFNULL(count,0)
函數進行判斷是否補零。
下面以查詢近一個月每天的數據為示例展示SQL實現。
SELECT DATE(CREATE_DATE) as date, COUNT(1) as count FROM 表 WHERE 字段 = '1' AND DATE_FORMAT(CREATE_DATE, '%Y-%m-%d') >= DATE_FORMAT(DATE_SUB(NOW(), INTERVAL 30 DAY), '%Y-%m-%d') GROUP BY DATE(CREATE_DATE);
查詢結果:
SELECT DATE_FORMAT(date,'%Y-%m-%d') AS date,data.num AS count FROM ( SELECT @days := DATE_ADD(@days, INTERVAL - 1 DAY) AS date FROM (SELECT @days := DATE_ADD(CURDATE(), INTERVAL + 1 DAY) FROM 表 ) day WHERE DATE_FORMAT(@days, '%Y-%m-%d') >= DATE_FORMAT(DATE_SUB(CURDATE(), INTERVAL 29 DAY), '%Y-%m-%d') ORDER BY date ) dates LEFT JOIN ( SELECT COUNT(1) AS num, DATE(CREATE_DATE) AS time FROM audit_work_sheet WHERE 字段 = '1' AND DATE_FORMAT(CREATE_DATE, '%Y-%m-%d %H:%i:%S') >= DATE_FORMAT(DATE_SUB(NOW(), INTERVAL 30 DAY), '%Y-%m-%d %H:%i:%S') GROUP BY DATE(CREATE_DATE) ) data ON DATE(time) = date ORDER BY date;
查詢結果:
SELECT DATE_FORMAT(date,'%Y-%m-%d') AS date,IFNULL(data.num, 0) AS count FROM ( SELECT @days := DATE_ADD(@days, INTERVAL - 1 DAY) AS date FROM (SELECT @days := DATE_ADD(CURDATE(), INTERVAL + 1 DAY) FROM 表 ) day WHERE DATE_FORMAT(@days, '%Y-%m-%d') >= DATE_FORMAT(DATE_SUB(CURDATE(), INTERVAL 29 DAY), '%Y-%m-%d') ORDER BY date ) dates LEFT JOIN ( SELECT COUNT(1) AS num, DATE(CREATE_DATE) AS time FROM audit_work_sheet WHERE 字段 = '1' AND DATE_FORMAT(CREATE_DATE, '%Y-%m-%d %H:%i:%S') >= DATE_FORMAT(DATE_SUB(NOW(), INTERVAL 30 DAY), '%Y-%m-%d %H:%i:%S') GROUP BY DATE(CREATE_DATE) ) data ON DATE(time) = date ORDER BY date;
查詢結果
SELECT DATE_FORMAT(date,'%Y-%m-%d') AS date,data.level AS level, IFNULL(data.num, 0) AS count FROM ( SELECT @days := DATE_ADD(@days, INTERVAL - 1 DAY) AS date FROM (SELECT @days := DATE_ADD(CURDATE(), INTERVAL + 1 DAY) FROM 表 ) day WHERE DATE_FORMAT(@days, '%Y-%m-%d') >= DATE_FORMAT(DATE_SUB(CURDATE(), INTERVAL 29 DAY), '%Y-%m-%d') ORDER BY date ) dates LEFT JOIN ( SELECT RISK_LEVEL AS level, COUNT(1) AS num, DATE(CREATE_DATE) AS time FROM audit_work_sheet WHERE 字段 = '1' AND DATE_FORMAT(CREATE_DATE, '%Y-%m-%d %H:%i:%S') >= DATE_FORMAT(DATE_SUB(NOW(), INTERVAL 30 DAY), '%Y-%m-%d %H:%i:%S') GROUP BY DATE(CREATE_DATE),level ) data ON DATE(time) = date ORDER BY date,level;
查詢結果
(中間過多數據不展示)
以上就是按天統計數據沒有數據補零的SQL語句,按月按年等其它時間段,或其它分組條件,都可以直接修改參數后查詢出結果。
DATE_FORMAT 是 MySQL 內置的一個函數,作用是以不同的格式顯示日期/時間數據。具體的語法如下:
DATE_FORMAT(date,format)
其中
date:合法的日期
format:規定日期/時間的輸出格式,其中format可使用的格式可以查看以下鏈接
下面我們通過具體例子來看如何通過 DATE_FORMAT 進行分組統計:
下表兩列分別代表產品買出的準確時間(精確到秒),和買出的產品類型。
start_time product_no
2017/12/1 00:00:112A
2017/12/3 07:51:113C
2017/12/3 07:59:253C
2017/12/5 15:40:456C
現在我們需要對每天,每周,每月各個產品的銷量進行統計,
1)按天統計:
select DATE_FORMAT(start_time,'%Y%m%d') days,count(product_no) count from test group by days;
2)按周統計:
select DATE_FORMAT(start_time,'%Y%u') weeks,count(product_no) count from test group by weeks;
3)按月統計:
select DATE_FORMAT(start_time,'%Y%m') months,count(product_no) count from test group bymonths;
以上就是“MySQL怎么按天分組統計一定時間內的數據”這篇文章的所有內容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會為大家更新不同的知識,如果還想學習更多的知識,請關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。