我正在使用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”。
我该怎么做?
答案 0 :(得分:3)
使用聚合函数:
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