1、迭代查询
??? 表结构
CREATE TABLE `product` ( `id` int(11) NOT NULL auto_increment COMMENT 'id', `productName` varchar(100) NOT NULL COMMENT '产品名称', `productPrice` int(11) NOT NULL COMMENT '产品价格', PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8
??? 测试数据
insert into `product` (`id`, `productName`, `productPrice`) values('1','产品1','23');insert into `product` (`id`, `productName`, `productPrice`) values('2','产品2','34');insert into `product` (`id`, `productName`, `productPrice`) values('3','产品3','38');insert into `product` (`id`, `productName`, `productPrice`) values('4','产品4','45');insert into `product` (`id`, `productName`, `productPrice`) values('5','产品5','78');insert into `product` (`id`, `productName`, `productPrice`) values('6','产品1','65');
???
??? 效果如图:
图1
图2
??? 从上面的查询结果可以看出,totalprice字段值的规则是从第1条记录到当前记录的totalprice之和,不过这种方式效率并不高,尤其在记录非常多的情况。
??? 从图2的查询结果分析可知,这个结果仍然是求和的操作,只是并不是对所有的记录求和,也不是分组求和,而是使用迭代的方式进行求和,求和的公式如下:当前 记录的totalprice值= 当前记录的productPrice值+ 上一条记录的totalprice值,上一条记录的totalprice值也可看成是当前记录以前所有记录的productPrice值之和。因此,可以 对每一条记录进行求和(使用sum函数),不过要求出当前记录及以前的记录的productPrice之和,如下面的SQL语句:
SELECT a.id,a.productPrice,(SELECT SUM(productPrice) FROM product b WHERE b.id <= a.id ) AS totalprice FROM product a;
?