2015-09-14 2 views
2

Я использую MS SQL, и у меня есть таблица вроде этого: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 

Я хотел бы узнать среднее число incident_flags за каждый инцидент_ид для каждого нападающего. Так, например, я хотел бы этот выход выглядеть следующим образом:

dogid  av_flags 
1   2.5 
2   1 

Они были найдены:

Для dogid 1, мы имеем incidentid с 3 флагами, и incidentid с 2-мя флажками. Av (3, 2) = 2,5

Для dogid 2 у нас есть случайный с 0 флагами (NA следует считать 0, это никогда не произойдет с другим инцидентом_flag на том же случайном) и инцидент с 2 флагами , Av (0, 2) = 1

Incident_id уникален для каждого догма (вы никогда не получите, скажем, инцидент_ид 1 под обоими догами 1 и другим догмом). Incident_flags не будет повторяться для одного инцидента (вы не можете иметь «два» при инциденте_id 1), но могут повторяться для других инцидентов, например. может получить инцидент_flag «a» для инцидента 1 и инцидента 20.

Как я могу это сделать?

ответ

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 
Смежные вопросы