最近要实现一个, 给定开始和结束日期, 统计每天新增用户数和新增订单数的功能, 如图所示:
该开始比较蠢, 采用的方法是:
先根据开始结束时间计算出中间的日期列表
遍历列表, 取当前日期和下一日期, 查询出在这段时间内新增加的用户数和订单数
可想而知, 这种查询的效率极低, 所幸 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" ) ;
这样就可以用一个查询语句就能获取所有所需的数据了, 效率提高了很多很多.
来源: https://juejin.im/post/5c5ba440e51d45013c405cd0