日期:2014-05-16  浏览次数:20682 次

sql存储过程 求平均值和总和
DELIMITER $$

DROP PROCEDURE IF EXISTS `txl`.`p1` $$
CREATE DEFINER=`tang`@`10.10.19.164` PROCEDURE `p1`(in N int)
BEGIN
declare a,b,c,d,e,h char(3) ;

  declare f char(10);

  declare g decimal(4,2);

  set e=1;

  drop table if exists zongping;

  create table zongping(name char(10),id char(3),english char(3),math char(3),politics char(3),chinese char(3),Total int,aver decimal(4,2));

  repeat

  select english,math,Politics,chinese,name into a,b,c,h,f from students where id=e;

  set d=a+b+c+h;

  set g=(a+b+c+h)/4;

  insert into zongping(name,id,english,math,Politics,chinese,total,aver) values( f,e,a,b,c,h,d,g );

  set e=e+1;

  until e=N

  end repeat;

select * from zongping;

END $$

DELIMITER ;


我的这个存储过程是将数据库txl里的students表格里的数据取出来,然后添加total和aver两列,最后将这些信息都插入到zongping这个表格中。但怎么给参数N赋值呢?因为我不知道students里的学生信息由多少行啊!而且将students表格里的数据添加total和aver两列的时候必须是id有规律的每次增加1,如果id号是没规律的怎么办?请高手指点一下!


------解决方案--------------------
为什么不直接用 聚合函数 avg() 求平均值?

看上去应该一句SQL语句就可以了。

建议你列出你的表结构,并提供测试数据以及基于这些测试数据的所对应正确结果。