SQL Server:平均值

时间:2014-06-10 19:16:51

标签: sql sql-server sum average

我试图找到列总和的平均值。使用以下代码:

select  avg(sum(totalSpend)) as HHtypetotalSpend,
        HHtype 
from dbo.ANTHEM_IDS_JR 
GROUP BY HHtype, totalSpend;

我得到错误:

  

无法对包含的表达式执行聚合函数   聚合或子查询。

有没有办法获得内置avg()函数的列总和的平均值,还是需要计算行数并将总和除以行数?

编辑后:

这是我的代码,感谢我的问题的一些答案:

  SELECT SUM(totalSpend)/SUM(numVisits) AS totalSpend, HHtype
  FROM dbo.ANTHEM_IDS_JR 
  GROUP BY HHtype

但我收到此错误消息:

  

遇到零错误。

有关如何解决此问题的任何想法?我应该创建一个函数来删除numVisits中的0行吗?

在另一个编辑之后:

现在是我的代码。这是一个功能:

DROP FUNCTION getHHtypeTotalSpendAvg

GO
CREATE FUNCTION getHHtypeTotalSpendAvg()
RETURNS float
BEGIN
DECLARE @HHtypetotalSpendAvg float
DECLARE @ANTHEM_IDS_JR_TABLE table (numVisits int, totalSpend float)

INSERT into @ANTHEM_IDS_JR_TABLE select numVisits as numVisits, totalSpend as totalSpend from dbo.ANTHEM_IDS_JR--(dbo.ANTHEM_IDS_JR.numVisits, dbo.ANTHEM_IDS_JR.totalSpend)
-- SET @ANTHEM_IDS_JR_TABLE=dbo.ANTHEM_IDS_JR.numVisits, dbo.ANTHEM_IDS_JR.totalSpend
-- select @HHtypetotalSpendAvg = sum(totalSpend)/sum(numVisits), HHtype from dbo.ANTHEM_IDS_JR GROUP BY HHtype;
DELETE numVisits from @ANTHEM_IDS_JR_TABLE WHERE numVisits=0
DELETE totalSpend from @ANTHEM_IDS_JR_TABLE WHERE totalSpend=NULL
select @HHtypetotalSpendAvg = sum(totalSpend)/sum(numVisits) from dbo.ANTHEM_IDS_JR GROUP BY HHtype;

RETURN @HHtypetotalSpendAvg
END;

GO
EXEC getHHtypeTotalSpendAvg`

但我收到错误消息:

  

无效的对象名称'numVisits'

任何帮助都将不胜感激。

2 个答案:

答案 0 :(得分:1)

您不能在另一个中使用一个聚合函数:

  SELECT (CASE WHEN SUM(numVisits) = 0 THEN 0 ELSE SUM(totalSpend)/SUM(numVisits) END) AS totalSpend
       , HHtype
  FROM dbo.ANTHEM_IDS_JR 
  GROUP BY HHtype, totalSpend

答案 1 :(得分:0)

总和的AVG没有多大意义在我看来,因为如果你已经创建了总和,那么你只有1个值来创建AVG。您将始终获得与SUM

相同的AVG