sql - SQL 列百分比(具有多个分组依据)
问题描述
语境
我有这个视图/展览,其中列出了发送日期、客户姓名、客户职位、拒绝类型、IDClientPosition 总数和 IDRefusal 总数的记录。我用它来检查每个日期发送的索赔数量、被接受、拒绝的数量以及每个客户拒绝的原因。(我有用于 ClientPosition、Refusal 和 Client 的相关表)
DtSent | IDClient | IDClientPosition | TOTAL Position | IDRefusal | TOTAL Refusal
---------------------------------------------------------------------------------------------
2020-01-10 1 1 40 NULL 0
2020-01-10 1 1 3 7 3
2020-01-10 1 2 1 NULL 0
2020-02-10 2 2 27 1 27
2020-02-10 2 2 13 2 13
查询到目前为止,显示上述值:
SELECT TOP (100) PERCENT dbo.LBA.DtSent, dbo.Claims.IDClient, dbo.LBA.IDClientPosition,
COUNT(dbo.LBA.IDClientPosition) AS [TOTAL Position], dbo.LBA.IDRefusal,
COUNT(dbo.LBA.IDRefusal) AS [TOTAL Refusal]
FROM dbo.LBA INNER JOIN
dbo.ClientPositionLBA ON dbo.LBA.IDClientPosition =
dbo.ClientPositionLBA.IDClientPositLBA LEFT OUTER JOIN
dbo.RefusalLBA ON dbo.LBA.IDRefusal = dbo.RefusalLBA.IDRefusal LEFT OUTER JOIN
dbo.Claims LEFT OUTER JOIN
dbo.Clients ON dbo.Claims.IDClient = dbo.Clients.IDClients ON
dbo.LBA.ClaimID = dbo.Claims.ClaimID
GROUP BY dbo.LBA.IDClientPosition, dbo.Claims.IDClient, dbo.LBA.IDRefusal, dbo.LBA.DtSent
我想要什么
我想根据 TOTAL Position 和 TOTAL Refusal 的值添加 2 列百分比。
有了这个,除了我已经拥有的总值(计数)之外,我还可以知道每个客户在该日期接受、拒绝了多少索赔的百分比以及有什么理由(IDRefusal)。总而言之,这就像将这些总值转换为百分比。
每个客户每个月应该有大约 100 条记录,总共 20 个客户,所以它必须考虑性能。我尝试过在网上找到的零散的东西,但没有用。
解决方案
只需除以总数:
COUNT(dbo.LBA.IDClientPosition) * 1.0 / COUNT(*),
COUNT(dbo.LBA.IDRefusal) * 1.0 / COUNT(*)
这* 1.0
是因为某些数据库会进行整数除法。* 1.0
产生一个带小数的数字,因此计算更准确。
推荐阅读
- mysql - 如何使用 SQL 将小时范围转换为总小时数?
- python - 我可以使用正则表达式仅提取标题吗?
- node.js - 对于2核机器,用pm2设置4个进程会有所帮助吗?
- php - 循环遍历PHP中的json解码数组
- javascript - 是否有适用于类组件的 React Material-UI makeStyles() 函数的非挂钩替代方案
- html - 为什么不显示:阻止元素集空间像其他元素一样被保留?
- java - 如何让bazel在java中通过maven_jar递归下载依赖项
- excel-formula - 我需要在公式输出范围内自动计算 UNIQUE 值,该范围可能为空白,也可能不为空白
- r - 如何在数据帧列表(或子集数据帧)上循环地理映射函数
- node.js - 使用 node.js 从 2 个 postgres 表中查询所有数据