我在 Sql Server 中有一个名为 MyTable 的表。 我想计算两列(例如 val1 和 val2)的行平均值。据我所知,我知道这可以像我下面的方法一样完成。但是有没有其他方法可以更快地做到这一点,而不必指定分母?
CREATE TABLE MyTable (
var CHAR(1) CHECK (var IN ('A', 'B', 'C')),
var2 CHAR(2) CHECK (var2 IN ('AA', 'BB', 'CC')),
val1 INT CHECK (val1 IN (1, 2, 3, 4, 5)),
val2 INT CHECK (val2 IN (1, 2, 3, 4, 5))
);
INSERT INTO MyTable (var,var2, val1, val2) VALUES
('A','AA', 1, 2),
('B','BB', 3, 4),
('A','BB', 1, 2),
('B','BB', 3, 4),
('A','BB', 1, 2),
('B','CC', 3, 4),
('A','CC', 1, 2),
('B','BB', 3, 4),
('C','CC', 5, 1);
select
var ,
var2,
val1,
val2 ,
(val1+val2)/2 as var3
from Mytable
为了按行使用聚合函数,您可以使用
CROSS APPLY
“逆透视”表,然后计算聚合:
SELECT m.*, r.calc_average
FROM MyTable AS m
CROSS APPLY (SELECT AVG(s.v)
FROM (VALUES (m.val1),(m.val2)) AS s(v) -- here goes column list
) AS r(calc_average);