Количество и процент записей в диапазоне значений - PullRequest
0 голосов
/ 09 мая 2018

У меня есть таблица с колонками

TicketID - ID of the ticket
AssignedTo - UserID of person to whom ticket is assigned
CreatedTime - Time when Ticket is received
HandleTime - Time when Ticket is picked up for handling
FinishTime - Time when Ticket is finished handling

Мне нужно получить следующие данные, сгруппированные по отдельному идентификатору AssignedTo:

  • AssignedTo

  • Скорость комплектования в следующих диапазонах (как%, так и количество)

    • <1 минута </li>
    • 1-2 минуты
    • 2-5 минут
  • Коэффициент закрытия в следующих диапазонах (как%, так и количество)
    • те же диапазоны, что и выше
  • Всего билетов

Я выдвинул начальный запрос как

SELECT 
   User,
   sum(case when PickupTime <=1 then 1 else 0 end) as range1,
   sum(case when PickupTime <=2 then 1 else 0 end) as range2,
   ...
FROM
   (SELECT 
      ((HandleTime - CreatedTime)/60000) as PickupTime, 
      ((FinishTime - CreatedTime)/60000) as CompletedTime,
      AssignedTo as User 
    FROM 
      TicketTable
    )T
GROUP BY 
    User

Здесь я могу получить только подсчеты диапазона срабатывания. Мне все еще нужны проценты диапазона срабатывания, а также подсчеты диапазона закрытия и проценты. Как их получить?

EDIT:

Давайте рассмотрим примерный набор данных и только два диапазона <= 1 и> 1, а также будем считать время как минуты здесь, тогда как в исходной таблице оно хранится как метка времени.

TicketID | AssignedTo | CreatedTime | HandleTime | FinishTime
   1          001          2              3           3
   2          001          4              6           8
   3          002          1              2           3

В приведенной выше таблице пользователю 001 назначено всего 2 билета, а пользователю 002 назначено всего 1 билет. PickupTime и CompletedTime для билетов

TicketID | PickupTime | CompletedTime
    1          1            1
    2          2            4
    3          1            2

Таким образом, для Пользователя-001 из двух назначенных ему билетов он выбрал 1 билет в диапазоне 1 минуты и 1 в диапазоне более 1 минуты. Таким образом, процент билетов в диапазоне 1 минуты составляет 50% и более 1 минуты. для него 50%. То же самое относится и к CompletedTime, а также к User-002. Итак, конечный результат, чего я хочу, это.

AssignedTo | Pickup_range1_count | Pickup_range2_count | Pickup_range1_percentage | 
001           1                       1                     0.5 
002           1                       0                     1        
Pickup_range2_percentage | Complete_range1_count | Complete_range2_count |
         0.5                       1                  1
         0                         0                  1
Complete_range1_percentage | Complete_range2_percentage 
          0.5                       0.5
          0                         1

1 Ответ

0 голосов
/ 10 мая 2018

По вашему примеру вы уже почти получили его. Все, что вам нужно, это соотношение отдельных сумм и общей суммы (или подсчет сделал бы это). Что-то вроде

SELECT AssignedTo,
       sum(1) AllCount,
       sum(CASE
             WHEN HandleTime - CreatedTime <= 1
               THEN 1
             ELSE 0
           END) Range1PickupCount,
       sum(CASE
             WHEN HandleTime - CreatedTime > 1
               THEN 1
             ELSE 0
           END) Range2PickupCount,
       ...
       sum(CASE
             WHEN HandleTime - CreatedTime <= 1
               THEN 1
             ELSE 0
           END) / sum(1) * 100 Range1PickupPercentage,
       sum(CASE
             WHEN HandleTime - CreatedTime > 1
               THEN 1
             ELSE 0
           END) / sum(1) * 100 Range2PickupPercentage,
       ...
       FROM Tickets
       GROUP BY AssignedTo;

должна быть действительной демонстрацией, к которой вы можете продолжить.

(Отказ от ответственности: вообще не тестировался, поскольку не было предоставлено DDL и DML.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...