非常使用的sql语句

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');

   

    效果如图:
非常使用的sql语句

图1


非常使用的sql语句

图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;

 

你可能感兴趣的:(mysql,迭代)