Sql 如何将AVG()应用于行而不是列?
我有一个从数据库获取数据的过程,作为示例,最终结果如下:Sql 如何将AVG()应用于行而不是列?,sql,sql-server,Sql,Sql Server,我有一个从数据库获取数据的过程,作为示例,最终结果如下: Column1 |Column2 |Column3 |Column4 |Column5 |Column6 --------|----------------|--------------|------------|------------|------- 1 |2 |1111 |001 |345.000000 |22
Column1 |Column2 |Column3 |Column4 |Column5 |Column6
--------|----------------|--------------|------------|------------|-------
1 |2 |1111 |001 |345.000000 |22
3 |5 |1111 |001 |700.000000 |22
1 |0 |1112 |001 |345.000000 |22
2 |7 |5454 |001 |1200.000000 |22
2 |5 |2364 |001 |1350.000000 |22
我希望每行应用AVG函数,这意味着我希望添加第7列,在该列下,该特定行第1、2、3、4、5和6列的所有值的AVG都是“平均值”
请注意,某些数据可以为空您可以使用算术:
select (column1 + column2 + column3 + column4 + column5 + column6) / 6
如果要将其添加到表中,可以使用计算列:
alter table t add column column7 as
(column1 + column2 + column3 + column4 + column5 + column6) / 6);
我应该注意,如果任何值是
NULL
,则返回的值将是NULL
。这是可以修复的,但是您的所有示例数据都是非空的您可以使用算术:
select (column1 + column2 + column3 + column4 + column5 + column6) / 6
如果要将其添加到表中,可以使用计算列:
alter table t add column column7 as
(column1 + column2 + column3 + column4 + column5 + column6) / 6);
我应该注意,如果任何值是
NULL
,则返回的值将是NULL
。这是可以修复的,但是您的所有示例数据都是非空的另外一个选项是值
表值构造函数:
SELECT
t.*,
Column7 = (
SELECT AVG(x)
FROM (VALUES (Column1), (Column2), (Column3), (Column4), (Column5), (Column6)) v(x)
)
FROM YourTable t
另一个选项是
值
表值构造函数:
SELECT
t.*,
Column7 = (
SELECT AVG(x)
FROM (VALUES (Column1), (Column2), (Column3), (Column4), (Column5), (Column6)) v(x)
)
FROM YourTable t
但除法将始终为6,这将影响数学结果–Houssem Timoumi 你必须多写一点:
alter table t add column7 as
( ( ISNULL (column1, 0)
+ ISNULL (column2, 0)
+ ISNULL (column3, 0)
+ ISNULL (column4, 0)
+ ISNULL (column5, 0)
+ ISNULL (column6, 0)
)
/ CASE WHEN column1 IS NULL THEN 0 ELSE 1 END
+ CASE WHEN column2 IS NULL THEN 0 ELSE 1 END
+ CASE WHEN column3 IS NULL THEN 0 ELSE 1 END
+ CASE WHEN column4 IS NULL THEN 0 ELSE 1 END
+ CASE WHEN column5 IS NULL THEN 0 ELSE 1 END
+ CASE WHEN column6 IS NULL THEN 0 ELSE 1 END
);
但除法将始终为6,这将影响数学结果–Houssem Timoumi 你必须多写一点:
alter table t add column7 as
( ( ISNULL (column1, 0)
+ ISNULL (column2, 0)
+ ISNULL (column3, 0)
+ ISNULL (column4, 0)
+ ISNULL (column5, 0)
+ ISNULL (column6, 0)
)
/ CASE WHEN column1 IS NULL THEN 0 ELSE 1 END
+ CASE WHEN column2 IS NULL THEN 0 ELSE 1 END
+ CASE WHEN column3 IS NULL THEN 0 ELSE 1 END
+ CASE WHEN column4 IS NULL THEN 0 ELSE 1 END
+ CASE WHEN column5 IS NULL THEN 0 ELSE 1 END
+ CASE WHEN column6 IS NULL THEN 0 ELSE 1 END
);
谢谢但是,当值为空时,有没有办法不考虑这些值?我的意思是像AVG函数一样,当一个值为null时,它会被跳过。@HoussemTimoumi-您可以添加where类来忽略null,其中column1不为null,column2不为null等等……但是除法将始终是6,这将影响数学结果谢谢!但是,当值为空时,有没有办法不考虑这些值?我的意思是像AVG函数一样,当一个值为null时,它被跳过。@HoussemTimoumi-您可以添加where类来忽略null,其中column1不为null,column2不为null等等……但是除法将始终是6,这将影响数学结果