SQL:获取另一个唯一ID中每个唯一ID的平均条目数

时间:2015-09-14 02:20:41

标签: sql sql-server average na

我正在使用MS SQL,我有一个这样的表:

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

我想找出每个dogid的每个incident_id的平均events_flags数。例如,我希望这个输出看起来像:

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”。

我该怎么做?

1 个答案:

答案 0 :(得分: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