sql - SQL Server 中的平均行数
问题描述
我有下表
Col1 Col2 Col3 Col4 Col5
TotalAvg 68.79 65.39 88.21 63.14
我已经保存了 TotalAvg 行中所有列的总数,但现在我想计算 TotalAvg 行的平均值。有人可以告诉我如何计算行平均值。
我在寻找
Select Avg(Col2,Col3,Col4,Col5)
where Col1 = 'TotalAvg'
谢谢
解决方案
如果您碰巧需要更动态的方法(即可变列),并且如果您对 TVF 持开放态度,请考虑以下事项:
编辑
第一个参数是要排除的列的分隔列表。例如:'IDNr,Year,AnyOtherNumericCol'
。
例子
Select A.*
,B.*
From YourTable A
Cross Apply [dbo].[tvf-Stat-Row-Agg]('',(Select A.* for XML Raw)) B
退货
Col1 Col2 Col3 Col4 Col5 RetCnt RetSum RetMin RetMax RetAvg RetStd
TotalAvg 68.79 65.39 88.21 63.14 4 285.53 63.14 88.21 71.3825 11.4562162892757
有兴趣的TVF
CREATE FUNCTION [dbo].[tvf-Stat-Row-Agg](@Exclude varchar(500),@XML xml)
Returns Table
As
Return (
Select RetCnt = Count(Value)
,RetSum = Sum(Value)
,RetMin = Min(Value)
,RetMax = Max(Value)
,RetAvg = Avg(Value)
,RetStd = Stdev(Value)
From (
Select Item = convert(varchar(100),xAttr.query('local-name(.)'))
,Value = try_convert(float,xAttr.value('.','varchar(max)'))
From @XML.nodes('//@*') x(xAttr)
) S
Where charindex(','+S.Item+',',','+@Exclude+',')=0
);
编辑 2
如果列是固定的,并且性能是最重要的,那么......
Select A.*
,B.*
From YourTable A
Cross Apply (
Select AvgVal = avg(Value)
From (values (Col2)
,(Col3)
,(Col4)
,(Col5)
) B1(Value)
) B
推荐阅读
- redirect - 结合查询字符串和直通的重写规则不起作用
- lucene - Lucene BlockJoin 查询以匹配所有术语出现在父文档或子文档中时
- django - 点赞按钮会跳转到新页面,怎么改成模态模式
- jenkins - 在詹金斯构建中的一段时间后停止 JMeter 脚本
- powershell - Where-Object、Select-Object 和 ForEach-object - 区别和用法
- php - PHP包含来自另一个多个目录的文件
- javascript - 在饼图上使用 billboardjs 显示不带小数的百分比
- android - 在这种情况下我应该使用 FLAG_ACTIVITY_CLEAR_TOP 吗?如何使用 FLAG_ACTIVITY_CLEAR_TOP 意图标志?
- sql-server - SQL Server:从 XML 数据输出中的任意节点中选择特定值 - 已回答
- java - 来自 Spring-Boot 的高级 Rest 客户端 7.1.1:java.lang.NoSuchMethodError: org.elasticsearch.action.bulk.BulkRequest.pipeline()Ljava/lang/String;