2014-06-10 10 views
1

Я пытаюсь найти среднее значение суммы столбца. С ниже кодом:SQL Server: avg sum

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

я получаю там ошибку:

Cannot perform an aggregate function on an expression containing an aggregate or a subquery.

Есть ли способ, чтобы получить среднее значение суммы столбцов с помощью встроенного в avg() функции, или мне нужно подсчитать строки и разделить сумму на количество строк?

ПОСЛЕ EDIT:

Вот мой код, благодаря некоторым ответам на мой вопрос:

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

Но я получаю сообщение об ошибке:

Divide by zero error encountered.

Любая идея о том, как почини это? Должен ли я создать функцию для удаления строк с 0 в numVisits?

ПОСЛЕ ДРУГОЕ EDIT:

Вот мой код в настоящее время. Это функция:

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` 

Но я получаю сообщение об ошибке:

Invalid object name 'numVisits'

Любая помощь будет оценена.

+0

В среднем сумма будет суммой ... Возможно, я не понимаю ваш вопрос ... –

+0

@Steve P: он хочет суммировать в группе, а затем разделить сумму по количеству строк в группе. – potashin

ответ

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

Ответьте на мой вопрос, но теперь, из-за того, что 0 в моем наборе данных, у меня есть ошибка: «Разделить на ноль столкнулись» – pbars23

+0

Не могли бы вы уточнить? Я посмотрел случай и сделал это с моим кодом: 'Select HHtype, SUM (totalSpend)/SUM (numVisits) AS totalSpend = ДЕЛУ jerryCase КОГДА 0 THEN 1 КОНЕЦ ИЗ dbo.ANTHEM_IDS_JR GROUP BY HHtype', но у меня есть несколько ошибок – pbars23

+0

@ pbars23: на самом деле, я не могу понять, почему 'COUNT' возвращает 0. В любом случае ваш синтаксис' CASE' недействителен, посмотрите на мой пример. – potashin

0

AVG суммы не имеет особого смысла, на мой взгляд, потому что если вы уже создали сумму, которую вы только 1 значение, из которого вы создаете AVG. Вы всегда получите тот же AVG, что и SUM

Смежные вопросы