SQL Server 2008 R2 子查询分组、求和和计数
Posted
技术标签:
【中文标题】SQL Server 2008 R2 子查询分组、求和和计数【英文标题】:SQL Server 2008 R2 Subquery grouping, summing and count 【发布时间】:2014-02-20 20:26:27 【问题描述】:我在数据库中有一个这样的表:
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
这只是说明所需结果的伪代码。我尝试使用子查询中的分组对每一列使用子查询,但这不起作用。
【问题讨论】:
【参考方案1】:很好的问题吉姆!这应该这样做。如果您想要更好的平均值,请将您的值转换为 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
【讨论】:
@ Ron Smith - 这正是我所需要的 - 非常适合我的要求 - 谢谢。以上是关于SQL Server 2008 R2 子查询分组、求和和计数的主要内容,如果未能解决你的问题,请参考以下文章
更新表以按分组列显示总计 SQL Server 2008 R2
sql server 2008 r2 - 多列,每列都有因变量的总和
根据 SQL Server 2008 R2 中特定列中的模式更改对行进行分组