繁体   English   中英

SQL Server 2008 R2子查询分组,求和和计数

[英]SQL Server 2008 R2 Subquery grouping, summing and count

我在数据库中有一个表,如下所示:

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

这只是伪代码说明了所需的结果。 我尝试使用子查询中的分组为每个列使用子查询,但这不起作用。

好问题吉姆! 这应该做到这一点。 如果您想要更好的平均值,请将您的值转换为浮点数用于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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM