我试图找到列总和的平均值。使用以下代码:
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'
任何帮助都将不胜感激。
答案 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