本篇文章为大家展示了mysql中怎么实现数据统计,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。

CREATETABLE`yyd_order`(  `id`bigint(20)unsignedNOTNULLAUTO_INCREMENT,  `user_id`int(11)NOTNULL,  `order_nid`varchar(50)NOTNULL,  `status`varchar(50)NOTNULLDEFAULT'0',  `money`decimal(20,2)NOTNULLDEFAULT'0.00',  `create_time`timestampNOTNULLDEFAULTCURRENT_TIMESTAMP,  `update_time`timestampNOTNULLDEFAULTCURRENT_TIMESTAMPONUPDATECURRENT_TIMESTAMP,  PRIMARYKEY(`id`),  KEY`userid`(`user_id`),  KEY`createtime`(`create_time`),  KEY`updatetime`(`update_time`))ENGINE=InnoDB;

1. 按天统计进单量,date_format

SELECTDATE_FORMAT(t.`create_time`,'%Y-%m-%d')t_date,COUNT(1)t_countFROMt_ordertWHEREt.`create_time`>'2018-05-11'GROUPBYDATE_FORMAT(t.`create_time`,'%Y-%m-%d');

2. 按小时统计进单量

SELECTDATE_FORMAT(t.`create_time`,'%Y-%m-%d%H')t_hour,COUNT(1)t_countFROMt_ordertWHEREt.`create_time`>'2018-05-11'GROUPBYDATE_FORMAT(t.`create_time`,'%Y-%m-%d%H');

3. 同比昨天进单量对比,order by h, date

SELECTDATE_FORMAT(t.`create_time`,'%Y-%m-%d%H')t_date,COUNT(1)t_countFROMyyd_ordertWHEREt.`create_time`>'2018-05-11'GROUPBYDATE_FORMAT(t.`create_time`,'%Y-%m-%d%H')ORDERBYDATE_FORMAT(t.`create_time`,'%H'),DATE_FORMAT(t.`create_time`,'%Y-%m-%d%H');

4. 环比上周同小时进单,date in ,order by

SELECTDATE_FORMAT(t.`create_time`,'%Y-%m-%d%H')t_date,COUNT(1)t_countFROMyyd_ordertWHEREDATE_FORMAT(t.`create_time`,'%Y-%m-%d')IN('2018-05-03','2018-05-11')GROUPBYDATE_FORMAT(t.`create_time`,'%Y-%m-%d%H')ORDERBYDATE_FORMAT(t.`create_time`,'%H'),DATE_FORMAT(t.`create_time`,'%Y-%m-%d%H');

5. 按照remark字段中的返回值进行统计,group by remark like ...

SELECTDATE_FORMAT(t.`create_time`,'%Y-%m-%d')t_date,COUNT(1)t_count,SUBSTRING_INDEX(SUBSTRING_INDEX(t.`msg`,'{',-1),'}',1)t_rsp_msgFROMcmoo_tabtWHEREt.`create_time`>'2018-05-17'ANDt.`rsp_msg`LIKE'%nextProcessCode%C9000%'GROUPBYDATE_FORMAT(t.`create_time`,'%Y-%m-%d'),SUBSTRING_INDEX(SUBSTRING_INDEX(t.`rsp_msg`,'{',-1),'}',1);

6. 统计每小时的各金额的区间数统计,sum if 1 0,各自统计

SELECTDATE_FORMAT(t.create_time,'%Y-%m-%d')t_date,SUM(IF(t.`amount`>0ANDt.`amount`<1000,1,0))t_0_1000,SUM(IF(t.`amount`>1000ANDt.`amount`<5000,1,0))t_1_5000,  SUM(IF(t.`amount`>5000,1,0))t_5000mFROMmobp2p.`yyd_order`tWHEREt.`create_time`>'2018-05-11'GROUPBYDATE_FORMAT(t.`create_time`,'%Y-%m-%d');

7. 按半小时统计进单量,floor h / 30,同理10分钟,20分钟

SELECTCONCAT(DATE_FORMAT(create_time,'%Y-%m-%d%H:'),IF(FLOOR(DATE_FORMAT(create_time,'%i')/30)=0,'00','30'))AStime_scope,COUNT(*)FROMyyd_orderWHEREcreate_time>'2018-05-11'GROUPBYtime_scopeORDERBYDATE_FORMAT(create_time,'%H:%i'),DATE_FORMAT(create_time,'%Y-%m-%d')DESC;

8. 成功率,失败率,临时表 join on hour

SELECT*FROM(SELECTDATE_FORMAT(t.`create_time`,'%Y-%m-%d')t_date,COUNT(1)'成功数'FROMyyd_ordertWHEREt.`create_time`>'2018-05-17'ANDt.`status`='repay_yes'GROUPBYDATE_FORMAT(t.`create_time`,'%Y-%m-%d'))t1RIGHTJOIN(SELECTDATE_FORMAT(t.`create_time`,'%Y-%m-%d')t_date,COUNT(1)'总数'FROMyyd_ordertWHEREt.`create_time`>'2018-05-11'GROUPBYDATE_FORMAT(t.`create_time`,'%Y-%m-%d'))t2ONt1.t_date=t2.t_date;

9. 更新日志表中最后条一条日志状态值到信息表中状态,update a join b on xx set a.status=b.status where tmp group by userid tmp2,注意索引

UPDATEt_ordert0LEFTJOIN(SELECT*FROM(SELECT*FROMt_order_logtWHEREt.create_time>'2018-05-11'ORDERBYidDESC)t1GROUPBYt1.user_id)ONt.user_id=t2.user_idSETt0.`status`=t2.statusWHEREt0.`create_time`>'2018-05-11'ANDt0.`status`=10;

10. 备份表,create table as select xxx where xxx

CREATETABLEt_mASSELECT*FROMt_order;

上述内容就是mysql中怎么实现数据统计,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注亿速云行业资讯频道。