Рассчитать процент отказов по данной таблице - PullRequest
0 голосов
/ 25 июня 2019

У меня есть таблица, которая выглядит следующим образом:

eventType.    deviceModel.    deviceType
received        S8             Samsung
success.        S8             Samsung
failure         S8             Samsung
.
.
.

      received = indicates that 'A' event was received
      Success =  indicates that 'A' event was processed successfully
      failure = indicates that 'A' event failed to process

Я хочу объединить эти данные и рассчитать процент отказов для комбинации deviceType и deviceModel.

По сути, мне нужно сначала подсчитать все записи с eventType «получены» для определенного deviceModel и deviceType.

Затем подсчитайте все записи с eventType "success" для той же комбинации deviceModel и deviceType, а затем вычислите% от (общее количество полученных - общее количество успешных) / общее время * 100.

Как я могу сделать это с помощью SQL-запроса?

Я ожидаю, что результат будет выглядеть как

 deviceType.     deviceModel.       Failure %
 samsung         S8                  10%

Ответы [ 2 ]

0 голосов
/ 25 июня 2019

это будет:

 select devicxeModel , 
   deviceType,
   Count(Case when  eventtype='Received' then 'Rec' end) - Count(Case when  eventtype='success' then 'suc' end)/count(*)*100 as failure 
 from Table1
 group by devicxeModel , deviceType
0 голосов
/ 25 июня 2019

Это то, что вы хотите?

select deviceModel, deviceType,
       avg( case when eventType = 'received' then 1.0 else 0 end ) as received_ratio
from t
where eventType in ('received', 'success')
group by deviceModel, deviceType;

Или это логика?

select deviceModel, deviceType,
       sum(case when eventType = 'received' then 1
                when eventType = 'success' then -1
                else 0
           end ) / count(*) as received_ratio
from t
group by deviceModel, deviceType;

Ни один из них не учитывает "неудачу", но вы, кажется, проситеодин из них.

РЕДАКТИРОВАТЬ:

Если вы хотите соотношение отказов, это будет:

select deviceModel, deviceType,
       avg( case when eventType = 'failure' then 1.0 else 0 end ) as failure_ratio
from t
group by deviceModel, deviceType;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...