2015-09-14 52 views
2

我使用MS SQL中獲取每個唯一ID條目的平均數,我有這樣的一個表:SQL:另一種獨特的ID

dogid  incident_id  incident_flags 
1   1    a 
1   1    c 
1   1    d 
1   20    b 
1   20    a 
2   12    NA 
2   14    a 
2   14    b 

我想找出incident_flags的平均數每個dogid的每個incident_id。因此,舉例來說,我想這個輸出看起來像:

dogid  av_flags 
1   2.5 
2   1 

這些被發現:

對於dogid 1,我們有3個標誌的incidentid,並與2個標誌的incidentid。 Av(3,2)= 2.5

對於dogid 2,我們有一個帶有0個標誌的incidentid(NA應該計爲0,它不會發生在同一個incidentid上的另一個incident_flag)和一個帶有2個標誌的事件。 Av(0,2)= 1

Incident_id對每個dogid都是唯一的(您將永遠不會在dogid 1和另一個dogid下獲得,比如incident_id 1)。 Incident_flags不會在一次事件中重複發生(您不能在incident_id 1下有兩次「a」),但可以爲其他事件重複使用,例如。可以爲事件1和事件20獲得incident_flag「a」。

我該如何解決這個問題?

回答

3

中使用聚合函數:

SQL Fiddle

SELECT 
    dogid, 
    av_flags = SUM(CASE WHEN incident_flags <> 'NA' THEN 1 ELSE 0 END)/ 
       (COUNT(DISTINCT incident_id) * 1.0) 
FROM tbl 
GROUP BY dogid