【问题标题】:SQL column percentage (with multiple group by)SQL 列百分比(具有多个分组依据)
【发布时间】:2020-02-29 18:19:28
【问题描述】:

上下文

我有这个视图/展览,其中列出了发送日期、客户姓名、客户职位、拒绝类型、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 个客户,所以它必须考虑性能。我尝试了一些我在网上找到的零散的东西,但没有用。

【问题讨论】:

  • (1) 显示您想要的结果。 (2) 标记您正在使用的数据库。 (3) 学会使用表别名:查询更容易写和读。
  • (1) 你的意思是添加一列并正好显示一个百分比我想看一个百分比? (2) 对不起,不明白 (3) 我确实使用了别名,但是在我做测试的时候,忘记了。应该认为这会有所帮助。对不起

标签: sql group-by percentage


【解决方案1】:

除以总数:

COUNT(dbo.LBA.IDClientPosition) * 1.0 / COUNT(*),
COUNT(dbo.LBA.IDRefusal) * 1.0 / COUNT(*)

* 1.0 是因为某些数据库会进行整数除法。 * 1.0 产生一个带小数的数字,因此计算更准确。

【讨论】:

  • @Whoopcg 。 . .这似乎是您所要求的。
  • 我要一个百分比。如果 Total Position 列总共提供了 40 条记录,而另一条返回 27 条,那么它们如何返回 1.00000000 的百分比?
猜你喜欢
  • 1970-01-01
  • 2018-05-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-09
  • 1970-01-01
相关资源
最近更新 更多