写在前面
昨晚一个朋友让我帮忙写一条 sql, 说是有一张订单表, 要查询出每天有多少人下单, 有多少人付款。听到这里可能很多人以为用 group by 分组, count 和 sum统计函数,问题就解决了。例如:
select 下单时间,count(下单时间)as 订单数量, sum(付款金额) as 实付金额 from 订单表 group by 下单时间
但是我们要考虑的是,用户有可能今天下订单,但是到第二天或者第三天才付款。这个时候这条订单的付款数据 要算到 第二天或者第三天去。有可能因为我的表达有问题,有的人没听懂,下面就贴出详细过程。
解决过程
1. 创建表
根据他的描述,我临时建了一张表。 当然,实际的订单表很复杂, 为了简化并突出重点,我只抽出了其中几个字段,字段名和类型也是随便写的。表结构如下:
CREATE TABLE `tb_order` (
`id` varchar(32) NOT NULL DEFAULT '', -- id
`status` varchar(20) DEFAULT NULL, -- 订单状态
`createtime` datetime DEFAULT NULL, -- 订单创建时间
`paytime` datetime DEFAULT NULL, -- 订单支付时间
`total` decimal(10,0) DEFAULT NULL, -- 订单支付金额
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
2. 插入数据