我在数据库中有一个表格,如下所示:
CREATE TABLE dbo.evals (
[id] [int] IDENTITY(1,1) NOT NULL,
[agent_id] [int] NOT NULL,
[matrix_1] [int],
[matrix_2] [int],
[matrix_2] [int])
每个matrix_(x)列的默认值为0.当管理员评估代理时,不需要为每个矩阵创建条目。可以每天评估代理商。如果输入矩阵,则其值将介于1和5之间。如果不是则为0.我需要创建一个报表,对每个代理的每个矩阵求和并求平均值。我需要在计算平均值时不计算0值,所以我需要以某种方式得到矩阵值<>的计数。每个都为0。该报告不是一次针对一个代理,而是针对一个报告中的所有代理。我已经尝试了一个具有子查询的agent_id的通用组,以获得具有矩阵<>的矩阵计数。 0并且它不起作用。我最终想要的是:
select agent_id, sum(matrix_1) / (count(matrix_1) where matrix_1 <> 0),
sum(matrix_2) / (count(matrix_2) where matrix_2 <> 0),
sum(matrix_3) / (count(matrix_3) where matrix_3 <> 0)
group by agent_id
这只是伪代码说明了所需的结果。我尝试使用子查询中的分组为每个列使用子查询,但这不起作用。
答案 0 :(得分:4)
好问题吉姆!这应该做到这一点。如果您想要更好的平均值,请将您的值转换为Avg
聚合的浮点数:
select
agent_id,
sum(matrix_1) Matrix1Sum,
avg(case when matrix_1 > 0 then cast(matrix_1 as float) end) Matrix1Average,
sum(matrix_2) Matrix2Sum,
avg(case when matrix_2 > 0 then cast(matrix_2 as float) end) Matrix2Average,
sum(matrix_3) Matrix3Sum,
avg(case when matrix_3 > 0 then cast(matrix_3 as float) end) Matrix3Average
from evals
group by
agent_id