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

标签 mysql sql database

我有一个包含列的表格

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

我需要检索分组到各个分配给 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 张票。 票证的 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

最佳答案

根据你的例子,你已经差不多明白了。您所需要的只是各个总和与总和的比率(或者计数会做到这一点)。类似的东西

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

关于mysql - 值范围内记录的计数和百分比,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50261115/

相关文章:

javascript - JQuery 在 Ajax 函数后删除表格行

mysql - Rails 中的嵌套 SQL 查询

php - 在 MySQL 中计数

sql - 如何修复 PostgreSQL 中错误的最重复值

python - 对 SQL 结果进行排序以提高可读性?

mysql - Zend 2 sql查询问题

PHP警告: mysqli_connect(): (HY000/2002): Connection refused

mysql - MySQL 中出现未知错误

php - 如何在php中正确放置mysql查询?

mysql - 如何显示连接到第二个表的一个表的结果,即使第二个表没有任何匹配记录?