值范围内记录的计数和百分比

pxiryf3j  于 2021-06-25  发布在  Mysql
关注(0)|答案(1)|浏览(298)

我有一个列表

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 id的以下数据:
分配给
以下范围内的领料率(百分比和计数)
<1分钟
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

在这里,我只能得到拾取范围计数。我仍然需要拾取范围百分比以及闭合范围计数和百分比。如何获得它们?
编辑:
让我们考虑一个样本数据集,只有两个范围<=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张票。取票时间和完成时间是

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

因此,对于user-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
9rnv2umw

9rnv2umw1#

根据你的例子,你已经差不多明白了。您所需要的只是单个和与总和的比率(或者计数会这样做)。像这样的

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

相关问题