有算法要求如下:

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 b
where a.id>=b.id
group by a.id
)
update @ta set da=w.av
from @ta a inner join w on a.id=w.id;

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

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

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

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

一条SQL语句求前面记录的平均值的更多相关文章

  1. 一条SQL语句求每月连续低温时间

    近期为某个项目写存储过程做统计.其中有个是这样的: 求每个月至少连续3个小时低于某个温度值的时间(小时). 假设有个全年温度表: CREATE TABLE #t(m INT, h INT ,t DEC ...

  2. 用一条SQL语句取出第 m 条到第 n 条记录的方法

    原文:用一条SQL语句取出第 m 条到第 n 条记录的方法   --从Table 表中取出第 m 条到第 n 条的记录:(Not In 版本)       *    FROM Table     id ...

  3. 使用传入的总记录数实现一条sql语句完成分页查询

    使用传入的总记录数实现一条sql语句完成分页查询     问题:在传统的分页查询的实现中不可避免的需要两条sql语句,一条用于查询数据一条用于查询总记录数.如下面的实际代码所示: Img1 当然如果使 ...

  4. 一条SQL语句是如何执行的?--Mysql45讲笔记记录 打卡day1

    写在前面的话:回想以前上班的时候,空闲时间还是挺多的,但是都荒废了.如今找工作着实费劲了.但是这段时间在极客时间买了mysql45讲,就好像发现了新大陆一样,这是我认真做笔记的第一天,说实话第一讲我已 ...

  5. 腾讯面试:一条SQL语句执行得很慢的原因有哪些?---不看后悔系列

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

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

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

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

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

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

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

  9. 一条Sql语句分组排序并且限制显示的数据条数

    如果我想得到这样一个结果集:分组排序,并且每组限定记录集的数量,用一条SQL语句能办到吗? 比如说,我想找出学生期末考试中,每科的前3名,并按成绩排序,只用一条SQL语句,该怎么写? 表[TScore ...

随机推荐

  1. JS——i++与++i

    先赋值后自增: var i = 0; var n1 = i++; alert(i);//返回1 alert(n1);//返回0 先自增后赋值: var i = 0; var n1 = ++i; ale ...

  2. 3星|《商业周刊中文版:2017商业人物(下)》:酒店才应该是出行住宿的最佳选择,Airbnb不是

    商业周刊/中文版:2017商业人物(下) 对一些知名商业人物的访谈的合辑. 总体评价3星,有一些参考价值. 以下是本期一些内容的摘抄: 1:段永平是一位隐秘的亿万富豪,去年,他创立的智能手机姊妹品牌O ...

  3. (转)Struts2访问Servlet的API及......

    http://blog.csdn.net/yerenyuan_pku/article/details/67315598 Struts2访问Servlet的API 前面已经对Struts2的流程已经执行 ...

  4. codeforces_738D

    D. Sea Battle time limit per test 1 second memory limit per test 256 megabytes input standard input ...

  5. 初学JSP_内置对象

    out内置对象: 表单,表单常用的的提交方式

  6. log4net 局部代码 看不懂....

    public interface ILogger {} public interface ILoggerWrapper { ILogger Logger {get;} } public interfa ...

  7. ajax请求参数的格式

    因为多写了一个contentType=“text/html”,请求的时候,参数总是转成了url&拼接的格式,导致请求不成功,调试了老半天 这个也是奇怪,为什么post只能接收json格式的数据 ...

  8. Java-Class-Miniprogram:com.common.utils.miniprogram.Auth

    ylbtech-Java-Class-miniprogram:com.common.utils.miniprogram.Auth 1.返回顶部 1.1. package com.ylbtech.com ...

  9. 【转载】使用IntelliJ IDEA创建Maven聚合工程、创建resources文件夹、ssm框架整合、项目运行一体化

    一.创建一个空的项目作为存放整个项目的路径 1.选择 File——>new——>Project ——>Empty Project 2.WorkspaceforTest为项目存放文件夹 ...

  10. enote笔记语言(3)

    what&why(why not)&how&when&where&which:紫色,象征着神秘而又潜蕴着强大的力量,故取紫色. key&key-memo ...