【问题标题】:SQL Server: avg sumSQL Server:平均总和
【发布时间】:2014-06-10 19:16:51
【问题描述】:

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

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'

任何帮助将不胜感激。

【问题讨论】:

  • 总和的平均值就是总和......也许我误解了你的问题......
  • @Steve P :他想在组中求和,然后将总和除以组中的行数。

标签: sql sql-server sum average


【解决方案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

【讨论】:

  • 这回答了我的问题,但现在,由于我的数据集中有 0,我有一个错误:Divide by zero encountered
  • 您能详细说明一下吗?我查找了案例并使用我的代码执行此操作:`SELECT HHtype, SUM(totalSpend)/SUM(numVisits) AS totalSpend = CASE jerryCase WHEN 0 THEN 1 END FROM dbo.ANTHEM_IDS_JR GROUP BY HHtype` 但我有多个错误
  • @pbars23 :实际上,我不明白为什么COUNT 返回0。无论如何,您的CASE 语法无效,请看我的示例。
  • 由于我的代码目标,我将count 更改为sum
  • @pbars23 :那么请您详细说明一下。为什么?
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-08
    • 1970-01-01
    • 2016-09-18
    相关资源
    最近更新 更多