有算法要求如下:

For (i=1,i<=10,i++)
{ta[i] = (t[1] + t[2] + ... + t[i]) / i;
}

用一条SQL语句实现它:

分别用表变量 @ta 和 @t 来对应 ta 和 t。

declare @t table(id int,d decimal(18,4));
declare @ta table(id int,da decimal(18,4));insert into @t(id,d) values(1,1);
insert into @t(id,d) values(2,2);
insert into @t(id,d) values(3,3);
insert into @t(id,d) values(4,4);
insert into @t(id,d) values(5,5);
insert into @t(id,d) values(6,6);
insert into @t(id,d) values(7,7);
insert into @t(id,d) values(8,8);
insert into @t(id,d) values(9,9);
insert into @t(id,d) values(10,10);insert into @ta(id,da) values(1,0);
insert into @ta(id,da) values(2,0);
insert into @ta(id,da) values(3,0);
insert into @ta(id,da) values(4,0);
insert into @ta(id,da) values(5,0);
insert into @ta(id,da) values(6,0);
insert into @ta(id,da) values(7,0);
insert into @ta(id,da) values(8,0);
insert into @ta(id,da) values(9,0);
insert into @ta(id,da) values(10,0);

则有SQL语句:

with w(id,av) as(
select a.id,avg(b.d)from @ta a,@t bwhere a.id>=b.idgroup by a.id
)
update @ta set da=w.av
from @ta a inner join w on a.id=w.id;

=================================================

但是这种方法有很严重的性能问题。后面记录求前面所有记录的平均值,每条记录都要将前面的算一遍,而完全没有办法重用前面的计算结果,当列很多,记录也很多的情况下,耗时非常的长。

这个时候,老老实实用游标,用循环来算,搞一些变量来保存中间值,性能反而很好。

真让人感慨,都说SQL的强项不在循环,应该尽量用SQL语句来代替循环,但在这里,却恰好相反。兵无常势,水无常形,SQL的性能问题,也不是那么死板的。

转载于:https://www.cnblogs.com/leftfist/p/4257920.html

一条SQL语句求前面记录的平均值相关推荐

  1. mysql用一条sql语句删除重复记录_mysql中删除重复记录,并保留重复数据中的一条数据的SQL语句...

    正好想写一条删除重复语句并保留一条数据的SQL,网上查了一部分资料写的很详细,但还是在这里写下自己的理解,以遍后续学习 .如下: 表字段和数据: SQL语句: DELETE FROM`user`WHE ...

  2. http://www.dewen.net.cn/q/17095/SQL:用一条SQL语句统计出符合条件的内容

    douya0808 1 票 douya0808 580 今天笔试遇到这样一个问题,没思路,求指点 create table employee{ no int primary key, salary i ...

  3. 判断resultset是否遍历到最后一条记录_干货:一条SQL语句执行得很慢的原因

    说实话,这个问题可以涉及到 MySQL 的很多核心知识,可以扯出一大堆,就像要考你计算机网络的知识时,问你"输入URL回车之后,究竟发生了什么"一样,看看你能说出多少了. 之前腾讯 ...

  4. 用一条sql语句删除表中所相同记录

    用一条sql语句删除表中所相同记录如下一.具有主键的情况 a.具有唯一性的字段id(为唯一主键) delete table where id not in ( select max(id) from ...

  5. mysql更新两表所有记录语句怎么写_mysql 一条sql语句update更新两个表

    mysql 一条sql语句update更新两个表 你写过一条sql语句来修改两个表的数据吗? UPDATE test.table1 t1,test.table2 t2 SET t1.aa='a',t1 ...

  6. 写出一条Sql语句,取出表A中的第31条到第40条记录。表A以自动增长的ID作为主键。(注意:ID可能不是连续的)

    写出一条Sql语句,取出表A中的第31条到第40条记录.表A以自动增长的ID作为主键.(注意:ID可能不是连续的).笔试的时候经常会出现这道题,网上的答案也是龙鱼混杂,今天自己实践了一下,找出了正确的 ...

  7. 一条SQL语句执行得很慢的原因有哪些?

    一.开始装逼:分类讨论 一条 SQL 语句执行的很慢,那是每次执行都很慢呢?还是大多数情况下是正常的,偶尔出现很慢呢?所以我觉得,我们还得分以下两种情况来讨论. 1.大多数情况是正常的,只是偶尔会出现 ...

  8. 腾讯面试题:一条SQL语句执行得很慢的原因有哪些?

    最近的招聘季,腾讯有一道面试题:一条SQL语句执行得很慢的原因有哪些? 其实,这个问题可以涉及到 MySQL 的很多核心知识,可以扯出一大堆,就像要考你计算机网络的知识时,问你"输入URL回 ...

  9. 腾讯面试:一条SQL语句执行得很慢的原因有哪些?

    戳蓝字"CSDN云计算"关注我们哦! 技术头条:干货.简洁.多维全面.更多云计算精华知识尽在眼前,get要点.solve难题,统统不在话下! 作者:帅地 转自:苦逼的码农 说实话, ...

  10. oracle将千万行查询优化到一秒内,oracle下一条SQL语句的优化过程(比较详细)

    oracle下一条SQL语句的优化过程(比较详细) 更新时间:2010年04月14日 23:56:49   作者: 很简单的一次调整,语句加了适当的索引后性能就有大幅的提升.当时看到这条语句的时候,第 ...

最新文章

  1. linux高效办公环境配置(vim、tmux、bash_profile)
  2. Plugin Error
  3. 本日吐槽!“人傻钱多”的P2P公司是否是程序员的合适选择(群聊天记录的娱乐)...
  4. 矩阵化为行最简形矩阵计算器_[内附完整源码和文档] 基于C++的小型特殊计算器...
  5. CodeForces - 1525D Armchairs(dp)
  6. CG-CTF-Web-/x00
  7. 使用Configuration Manager部署及管理软件更新(2)
  8. 原 BinaryWriter和BinaryReader(二进制文件的读写)
  9. PS发光眩光效果插件:BBTools Glow Glare for Mac
  10. 计算机文化基础第二次答案,中国石油大学2020年秋计算机文化基础第二次在线作业答案...
  11. Lesson 3 Part 1 Locally weighted regression
  12. 类的封装,继承和多态
  13. 蓝桥杯2019B组 C++
  14. 20145322何志威 《Java程序设计》第8周学习总结
  15. 74HC573的使用方法
  16. Matlab读取股票数据
  17. 直达号PK公众号的背后还有哪些市场空间?
  18. 想做出高级又好看的PPT,这8个窍门你别错过
  19. QQ邮箱取消免费扩容;苹果搜索引擎“胎死腹中”,核心成员已回归谷歌麾下;Xcode 14导致应用体积大增|极客头条
  20. 图书管理系统(Java语言)

热门文章

  1. 裘慧明:跟世界上最聪明的人博弈
  2. API网关的几点思考
  3. CTP: 11:31分等非交易时段报单录入的应对
  4. 《金融时报》和麦肯锡:本年度最佳书单
  5. 阿里云张献涛:如何修炼云计算的弹指神通
  6. 【回归预测】基于matlab麻雀搜索算法优化CNN回归预测【含Matlab源码 282期】
  7. 【TSP】基于matlab模拟退火算法求解34城市旅行商问题【含Matlab源码 882期】
  8. 【车间调度】基于matlab灰狼优化算法求解柔性作业车间问题【含Matlab源码 661期】
  9. 【语音去噪】基于matlab GUI LMS+RLS语音去噪【含Matlab源码 528期】
  10. python 多figure subplot 水平线 legend