2014-06-10 8 views
1

열 합계의 평균을 찾으려고합니다. 아래의 코드와 함께 :SQL Server : 평균 합계

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() 기능에 내장 된 컬럼의 합계의 평균을 얻을 수있는 방법이 있나요 또는 내가해야합니까 행을 세고 합계를 행의 수로 나눕니까?

AFTER 편집 :

여기에 내 질문에 어떤 답변을 내 코드 덕분이다 :

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

하지만이 오류 메시지가 얻을 :

Divide by zero error encountered.

하는 방법에 대한 아이디어를 이것을 고쳐라? numVisits에서 0으로 행을 제거하는 함수를 작성해야합니까? ANOTHER 편집 한 후

:

것은 지금 여기 내 코드입니다. 그것은 함수 :

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

당신은 또 다른 하나 개의 집계 기능을 사용할 수 없습니다 : 이미 합을 만든 경우에만 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이 있기 때문에 오류가 있습니다 : '0으로 나누기' – pbars23

+0

자세히 설명해 주시겠습니까? 0 THEN하지만 HHtype' BY dbo.ANTHEM_IDS_JR 그룹에서 1 END 이있을 때 jerryCase totalSpend = CASE AS/SUM (numVisits)를'HHtype을 선택, SUM (totalSpend) : 나는 경우를 고개를 내 코드로 이런 짓을 복수 오류 – pbars23

+0

@ pbars23 : 사실, 왜'COUNT'가 0을 반환하는지 이해할 수 없습니다. 어쨌든, 당신의'CASE' 구문이 유효하지 않습니다. 제 예제를보십시오. – potashin

0

AVG는, 제 생각에는 많은 이해가되지 않는에서 당신은 AVG를 만들고 있습니다. 당신은 항상 SUM과 같은 평균 AVG를 얻을 것입니다