一条SQL语句求全年平均值
2024-08-31 02:07:21
一年有8760个小时!(才这么点。。。)
有个气候表,存储了当地从1到8760小时的温度数据。现在,要求全年的温度每天平均值。
CREATE TABLE #Climate(h INT ,t DECIMAL(18,4));--h:小时 t:温度值
--里面有8760条记录,对应全年每小时的温度值 --现在,想将全年气温按天计算平均值,保存到表#tD
CREATE TABLE #tD(d INT ,avgt DECIMAL(18,4));--d:天 avgt:平均温度值 --最简单,就是用循环
DECLARE @d INT;
DECLARE @h1 INT,@h2 INT;
SET @d = 1;
WHILE @d <= 365
BEGIN
SET @h1 = 24 * (@d - 1);
SET @h2 = @h1 + 24; --缓存计算值到表变量
INSERT INTO #tD(d,avgt)
SELECT @d
,AVG(t)
FROM [#Climate]
WHERE h BETWEEN @h1 AND @h2; SET @d = @d + 1;
END --end of @d <= 365
但是,存储过程用循环并没有什么优势,效率不高。我们可以使用一条SQL语句来搞定它。
首先要设置一张 天 表,一年有365天,对应有365条记录
CREATE TABLE #days(d INT);
DECLARE @i INT = 1;
WHILE @i <= 365
BEGIN
INSERT INTO #days(d) VALUES(@i);
SET @i = @i + 1;
END
利用这个天表,进行聚合运算
INSERT INTO #tD(d,avgt)
SELECT ds.d
,AVG(c.t)
FROM [#Climate] c,[#days] AS ds
WHERE c.h BETWEEN 24 * (ds.d - 1) AND ds.d * 24
GROUP BY ds.d;
最新文章
- 在Linux虚拟机下配置tomcat
- 解决pip安装超时
- 《聚焦3D地形编程》学习点
- oc-05-对象的创建
- PHPCMS V9 导航栏当前栏目高亮
- Nim函数调用的几种形
- 半径无关快速高斯模糊实现(附完整C代码)
- range与enumerate的区别
- JFinal Druid 配置
- Java基础知识及学习规划【图】
- cowboy源码分析(三)
- 游戏AI
- 【转】【完全开源】百度地图Web service API C#.NET版,带地图显示控件、导航控件、POI查找控件
- CCF-棋局评估 201803-04(版本 2.0)------(之前写了一个臃肿的1.0版 ,还沾沾自喜 233)
- pycharm安装激活及简单设置
- linux没有那个文件或目录
- filter IE滤镜(Internet Explorer)CSS
- 谈谈INotifyPropertyChanged和ICommand
- HDU 1711 Number Sequence (KMP简单题)
- JS图片加载时获取图片宽高信息