最近要实现一个,给定开始和结束日期,统计每天新增用户数和新增订单数的功能,如图所示:
该开始比较蠢,采用的方法是:
- 先根据开始结束时间计算出中间的日期列表
- 遍历列表,取当前日期和下一日期,查询出在这段时间内新增加的用户数和订单数
可想而知,这种查询的效率极低,所幸sql有一种sql语句恰好满足了这种需求,比如我需要查询订单表每天新增的订单数,可以这样写查询语句:
- 以天为单位统计
SELECT DATE_FORMAT(created_at, “%Y-%m-%d” ) , COUNT( * ) FROM order_table WHERE status = ‘SUCCESS’ GROUP BY DATE_FORMAT( created_at, “%Y-%m-%d” ) ;
复制代码
- 以小时为单位统计
SELECT DATE_FORMAT(created_at, “%Y-%m-%d %H” ) , COUNT( * ) FROM order_table WHERE status = ‘SUCCESS’ GROUP BY DATE_FORMAT( created_at, “%Y-%m-%d %H” ) ;
复制代码
这样就可以用一个查询语句就能获取所有所需的数据了,效率提高了很多很多。