2017-01-10 2 views
4

다음 계산을 기반으로 가중 평균을 계산하려고합니다. 이 것이 경우에 따라서SQL Server에서 가중 평균 계산

Time Diff | Count | 
    1  | 2 | 
    12  | 2 | 

: 의미 내림 그때의 시간 차이에 따라 평균을 계산해야

item |  Date Sent  |  Date Received 
1 |  2 Feb 10am |  3 Feb 10am 
1 |  6 Feb 11am |  6 Feb 12pm 
2 |  2 Feb 10am |  3 Feb 10am 
2 |  6 Feb 11am |  6 Feb 12pm 

:

내가 이렇게 보이는 데이터 집합을 가지고 be :

1 * 2 + 12 * 2/(12 + 1) 

집계 테이블을 계산하기 위해 이미 SQL 쿼리를 작성했습니다.

select 
    floor(datediff(hh, dateSent, dateReceived)) as hrs, 
    count(item) as freq 
from 
    table 
group by 
    floor(datediff(hh, dateSent, dateReceived)) 
having 
    floor(datediff(hh, dateSent, dateReceived)) < 100 
order by 
    floor(datediff(hh, dateSent, dateReceived)) asc; 

하위 쿼리를 수행해야합니까? 나는 능숙하지 않고 시도했지만 구문 오류가 계속 발생합니다.

가중 평균을 구하기 위해 누군가 SQL 쿼리를받을 수 있습니까? 당신이 "가중 평균"는 무엇을 의미하는 것은 모든 시간의 차이의 평균 경우

+0

내 생각 엔 당신이 실제로 이런 방식으로 ID로 그룹화 할 수 있습니다 : 'AVG (DATEDIFF (HOUR, dateSent, dateReceived))) <100 ORDER BY 2; 또는 무언가가있는 myTable GROUP BY 항목의 freq = COUNT (*)에서 항목을 선택하고 hrs = AVG (DATEDIFF (HOUR, dateSent, dateReceived) 그렇게? – ZLK

+0

실제로 가중치 평균을 얻으려는 경우 하위 쿼리의 일부가 될 것이라고 생각했지만 성공하지 못했습니다. 왜 2 시까지는 주문 하시겠습니까? –

+0

"가중 평균"이란 무엇을 의미하는지 확신 할 수 없습니다. 어떻게 그것이 "가중치"입니까? 또한 'order by 2'는 "두 번째 칼럼에 의한 주문"이라고 말하는 게으른 짧은 손이었습니다. – ZLK

답변

4

, 그 다음은 도움이 될 수 있습니다

select AVG(a.hrs) 
from 
(
    select floor(datediff(hh,dateSent,dateReceived)) as hrs, 
    count(item) as freq from table 
     group by floor(datediff(hh,dateSent,dateReceived)) 
      having floor(datediff(hh,dateSent,dateReceived)) <100 
--    order by floor(datediff(hh,dateSent,dateReceived)) asc 
) a 
+0

예, 감사합니다. 네가 할 수 있다는 것을 나는 몰랐다. 내 마지막 결과는 AVG (a.hrs) 대신 sum (a.hrs * a.freq)/sum (a.freq)을 선택하는 것입니다. –