mysql - 值范围内记录的计数和百分比
问题描述
我有一个有列的表
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 张票。门票的 PickupTime 和 CompletedTime 是
TicketID | PickupTime | CompletedTime
1 1 1
2 2 4
3 1 2
因此,对于分配给他的两张票中的 User-001,他选择了 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。)
推荐阅读
- javascript - 如何遍历 API 响应并将正确的数据插入到相同的 div 中?
- c# - 未启用 ASP.NET Core 2 CORS
- ansible - 在剧本级别动态包含 var 文件
- python-3.x - 在 Python 3.6 中对具有隐式类型的序列进行迭代
- javascript - 当我使用 $("#table").DataTable().row.add() 添加数据时,JQuery 数据表的宽度会增加
- r - R- 如何使用 map() 到 map()
- java - 尝试在 GCM 模式下解密消息时收到 AEADBadTagException
- android - 无法在 Android 中使用 Firebase 应用内消息?
- angular - 使用 web.config 的 Azure 和 Angular 应用程序不根据 URL 路由进行版本控制(两个实时版本)
- java - EndPoint 和 WebService 的区别 - Spring