2016-03-05 98 views
0

給一個表最初與數據如下:獲取每個用戶的總的和平均通話時間

ID |user  |Contact |Duration 
1 asif  11   00 
2 bob   22   65 
3 cena  33   00 
4 asif  44   00 
5 cena  33   00 
6 cena  33   00 
7 bob   55   43 
8 asif  44   33 
9 bob   66   00 

我將具有用於每個用戶不同的接觸的數目,我使用了以下內容:

select user, count(distinct contact) from table group by user; 

這給我提供了以下的輸出:

|A  |count 
asif 2 
bob  3 
cena 1 

現在,我想有由用戶的總時長,以及一個s ACD(平均通話時間= duration_total/count of contact with duration > 0)。例如:

| asif'ACD = (33+00+00)/1 = 33 | 
    | bob'ACD = (65+43+00) /2 = 54 | 
    | cena'ACD = (00+00+00 /0 = 0 | 

,我正在尋找將

|user  |count |duration_total |ACD 
asif  2  33     33 
bob  3  108    54 
cena  1  00     00 

可能有人請給我約我應該使用什麼SQL命令一些建議,最終的結果?

回答

0

您可以使用sumcase。有一點要注意的事項不被零除,因此子查詢:

select user, 
     contactcount, 
     duration, 
     case when durationcount = 0 then 0 else duration/durationcount end 
from (
    select user, 
      count(distinct contact) contactcount, 
      sum(duration) duration, 
      sum(case when duration > 0 then 1 else 0 end) durationcount 
    from table 
    group by user 
) t 
相關問題