mysql按天/小時/半小時/N分鐘/分鐘進行數(shù)據(jù)分組統(tǒng)計功能
mysql不同時間粒度下的分組統(tǒng)計
我們在做項目或者數(shù)據(jù)分析時,經(jīng)常遇到這樣的需求:統(tǒng)計不同時間粒度下的數(shù)據(jù)分布情況,例如,每一天中每個小時網(wǎng)站的訪問量,某路口每半個小時通過的車輛數(shù)量等。對于此類的問題,一個sql簡單的查詢就能實現(xiàn),故特此記錄下,方便以后使用。
在MySQL中,我的表為:track 數(shù)據(jù)結(jié)構(gòu)如下所示:

按天統(tǒng)計
SELECT DATE(TimeStart) AS date, COUNT(*) AS num FROM track WHERE Flag = 0 AND Duration >= 300 GROUP BY date ORDER BY date;
按小時統(tǒng)計
SELECT DATE_FORMAT(TimeStart, '%Y-%m-%d %H:00:00') AS time, COUNT(*) AS num FROM track WHERE Flag = 0 AND Duration >= 300 GROUP BY time ORDER BY time;

按半小時統(tǒng)計
SELECT time, COUNT( * ) AS num FROM ( SELECT Duration, DATE_FORMAT( concat( date( TimeStart ), ' ', HOUR ( TimeStart ), ':', floor( MINUTE ( TimeStart ) / 30 ) * 30 ), '%Y-%m-%d %H:%i' ) AS time FROM tarck WHERE Flag = 0 AND Duration >= 300 ) a GROUP BY DATE_FORMAT( time, '%Y-%m-%d %H:%i' ) ORDER BY time;

按N分鐘統(tǒng)計
SELECT time, COUNT( * ) AS num FROM ( SELECT Duration, DATE_FORMAT( concat( date( TimeStart ), ' ', HOUR ( TimeStart ), ':', floor( MINUTE ( TimeStart ) / 10 ) * 10 ), '%Y-%m-%d %H:%i' ) AS time FROM tarck WHERE Flag = 0 AND Duration >= 300 ) a GROUP BY DATE_FORMAT( time, '%Y-%m-%d %H:%i' ) ORDER BY time;
基本思路:將datetime類型的時間轉(zhuǎn)化為相應(yīng)時間片的時間,例如將‘2017-03-01 01:08:19’ 轉(zhuǎn)化為‘2017-03-01 01:00:00’,然后group by即可。
按分鐘統(tǒng)計
將按小時統(tǒng)計的SQL語句稍微修改下,就可以實現(xiàn)按分鐘統(tǒng)計
SELECT DATE_FORMAT(TimeStart, '%Y-%m-%d %H:%i:00') AS time, COUNT(*) AS num FROM track WHERE Flag = 0 AND Duration >= 300 GROUP BY time ORDER BY time;
參考資料: https://blog.csdn.net/u010946448/article/details/83752984
到此這篇關(guān)于mysql按天/小時/半小時/N分鐘/分鐘進行數(shù)據(jù)分組統(tǒng)計的文章就介紹到這了,更多相關(guān)mysql數(shù)據(jù)分組統(tǒng)計內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
mysql中insert并發(fā)問題(on?DUPLICATE?KEY?UPDATE)
本文主要介紹了mysql中insert并發(fā)問題(on?DUPLICATE?KEY?UPDATE),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-01-01

