MySql如何按照日期進(jìn)行分組統(tǒng)計(jì)
最近接到一個(gè)需求,就是按照日期進(jìn)行統(tǒng)計(jì)數(shù)量,數(shù)據(jù)庫(kù)表里有id(編號(hào)),date(日期),phone(手機(jī)號(hào))
數(shù)據(jù)庫(kù)
CREATE TABLE `tb_count` ( `id` int(20) NOT NULL AUTO_INCREMENT COMMENT '編號(hào)', `tiems` datetime(0) NOT NULL COMMENT '日期', `number` varchar(11) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '手機(jī)號(hào)', PRIMARY KEY (`id`) USING BTREE ) ENGINE = InnoDB AUTO_INCREMENT = 18 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
我的sql是這樣的
這一條sql是查詢所有的,可以按照這個(gè)方法進(jìn)行分頁(yè)查詢,查詢所有
SELECT COUNT(*) AS counts,DATE_FORMAT(tiems,"%Y年%m月%d日") AS dates FROM tb_count GROUP BY DATE_FORMAT (tiems,"%Y年%m月%d日") -- DATE_FORMAT();按照格式對(duì)某個(gè)日期操作, -- tb_count 表名 -- period 日期 -- 整段代碼的意思是:從tb_count表中 查詢?nèi)掌冢╬eriod )(將日期按照"%Y年%m月"格式)并作為dates,統(tǒng)計(jì)數(shù)量(count(*)),按照日期分組 GROUP BY DATE_FORMAT(period ,"%Y年%m月")
如果是進(jìn)行分頁(yè)查詢 我是做了一個(gè)封裝,將count(數(shù)量)和period(時(shí)間)做了一個(gè)封裝,做了一個(gè)實(shí)體類,技術(shù)有限,只能想到封裝為一個(gè)對(duì)象
封裝對(duì)象
@ApiModel(description = "Statis",value = "Statis") public class Statis implements Serializable { //數(shù)量 @ApiModelProperty(value = "",required = false) private int counts; //時(shí)間 @ApiModelProperty(value = "",required = false) private String dates; public int getCounts() { return counts; } public void setCounts(int counts) { this.counts = counts; } public String getDates() { return dates; } public void setDates(String dates) { this.dates = dates; } }
Service層
/** * 分頁(yè)查詢 * @param page 當(dāng)前頁(yè) * @param size 每頁(yè)顯示的條數(shù) * @return */ Result findPage(int page,int size);
ServiceImpl Service層實(shí)現(xiàn)類
我這邊用分頁(yè)插件是PageInfo,需要傳入一個(gè)page和size
/** * 分頁(yè)查詢 * @param page 當(dāng)前頁(yè) * @param size 每頁(yè)顯示的條數(shù) * @return */ @Override public Result findPage(int page, int size) { try { //分頁(yè)查詢 PageHelper.startPage(page, size); //查詢所有 List<Statis> statisList = countsMapper.findAll(); PageInfo<Statis> pageInfo = new PageInfo<Statis>(statisList); return new Result(true,StatusCode.OK,"分頁(yè)查詢成功",pageInfo); }catch (Exception e){ e.printStackTrace(); return new Result(false,StatusCode.ERROR,"分頁(yè)查詢失敗"); } }
Controller層
/** * 分頁(yè)查詢 * @param page 當(dāng)前頁(yè) * @param size 每頁(yè)顯示的條數(shù) * @return * @throws Exception */ @GetMapping("/search/{page}/{size}") @ApiImplicitParams({ @ApiImplicitParam(paramType = "path", name = "page", value = "當(dāng)前頁(yè)", required = true, dataType = "Integer"), @ApiImplicitParam(paramType = "path", name = "size", value = "每頁(yè)顯示條數(shù)", required = true, dataType = "Integer") }) @ApiOperation(value = "日期分頁(yè)查詢",notes = "日期分頁(yè)方法詳情",tags = {"MemberController"}) public Result findPage(@PathVariable int page,@PathVariable int size) throws Exception { return countsService.findPage(page, size); }
最后就是測(cè)試了
這個(gè)需求不是很難,就是一個(gè)簡(jiǎn)單的分頁(yè)查詢而已,難點(diǎn)在于這個(gè)sql。
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
- MySQL按天分組統(tǒng)計(jì)一定時(shí)間內(nèi)的數(shù)據(jù)實(shí)例(沒有數(shù)據(jù)補(bǔ)0)
- mysql如何分別按年/月/日/周分組統(tǒng)計(jì)數(shù)據(jù)詳解
- mysql如何分組統(tǒng)計(jì)并求出百分比
- mysql實(shí)現(xiàn)按照某個(gè)時(shí)間段分組統(tǒng)計(jì)
- Mysql出生日期轉(zhuǎn)換為年齡并分組統(tǒng)計(jì)人數(shù)的方法示例
- MYSQL每隔10分鐘進(jìn)行分組統(tǒng)計(jì)的實(shí)現(xiàn)方法
- mysql按天/小時(shí)/半小時(shí)/N分鐘/分鐘進(jìn)行數(shù)據(jù)分組統(tǒng)計(jì)功能
相關(guān)文章
微信昵稱帶符號(hào)導(dǎo)致插入MySQL數(shù)據(jù)庫(kù)時(shí)出錯(cuò)的解決方案
Mysql的utf8編碼最多3個(gè)字節(jié),而Emoji表情或者某些特殊字符是4個(gè)字節(jié),所以會(huì)導(dǎo)致帶有表情的昵稱插入數(shù)據(jù)庫(kù)時(shí)出錯(cuò),下面給大家分享下解決方案,需要的朋友參考下吧2016-12-12查看當(dāng)前mysql使用頻繁的sql語(yǔ)句(詳解)
下面小編就為大家?guī)?lái)一篇查看當(dāng)前mysql使用頻繁的sql語(yǔ)句(詳解)。小編覺的挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來(lái)看看吧2017-03-03MySQL thread_stack連接線程的優(yōu)化
當(dāng)有新的連接請(qǐng)求時(shí),MySQL首先會(huì)檢查Thread Cache中是否存在空閑連接線程,如果存在則取出來(lái)直接使用,如果沒有空閑連接線程,才創(chuàng)建新的連接線程2017-04-04