sql - SQL Server 2008 中各行的平均值
问题描述
我有下表
Data Data1 Data2 YTD
-------------------------
1 2 3
2 3 4
3 3 6
在YTD
列中,我必须平均行数据。我可以在列中使用平均值,但不确定如何跨行平均。
寻找以下结果并使用 SQL Server 2008
Data Data1 Data2 YTD
---------------------------------
1 2 3 2 (Average)
2 3 4 3
3 null 6 4.5
解决方案
我认为cross apply
是最简单的方法:
select t.*, v.avg_data
from t cross apply
(select avg(v.data) as avg_data
from (values (t.data), (t.data1), (t.data2)) v(data)
) v;
使用case
表达式,您也可以将其表示为:
select t.*,
( (coalesce(t.data, 0) + (t.data1, 0) + coalesce(t.data2, 0)) /
nullif( (case when t.data is not null then 1 else 0 end) +
(case when t.dat1 is not null then 1 else 0 end) +
(case when t.dat2 is not null then 1 else 0 end), 0
)
) as avg_data;
然而,这个公式很混乱并且容易出现打字错误。
推荐阅读
- bash - 如何使用 Bash 根据关键字将文件的内容分成列
- html - 在html页面上显示均匀分布的表格内容
- java - 为什么这个插件(用于 minecraft java)不起作用?
- python - 如何在`with`上下文管理器中模拟sqlalchemy执行输出
- android - 在 safeArgs 中将 ArrayList 作为参数传递
- javascript - 莫里斯折线图:单击时获取点值
- excel - 在 EXCEL 中为每个第一列单元格查找第二列集的最后一个单元格值
- c - C: 我不知道“while(temp->next->next)”是什么意思
- apache-spark - Pyspark-将每个数据帧保存到一个文件中
- visual-studio - 在visual stdio 2019 C++中,我试图打开一个空的peject,但没有成功......?