mysql中怎么实现数据统计
本篇文章为大家展示了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中怎么实现数据统计,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注亿速云行业资讯频道。
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。