gpt4 book ai didi

sql - 计算两个值之间的百分比

转载 作者:行者123 更新时间:2023-12-04 22:26:26 25 4
gpt4 key购买 nike

我有两列包含数字,我试图计算它们之间的百分比差异并在另一列中显示结果,但结果似乎是错误的。

这是有问题的代码。

SELECT 
GenPar.ParameterValue AS ClaimType,
COUNT(Submitted.ClaimNumber) AS SubmittedClaims,
COUNT(ApprovalProvision.ClaimNumber) AS ApprovedClaims,
COUNT(Declined.ClaimNumber) AS DeclinedClaims,
COUNT(Pending.ClaimNumber) AS PendingClaims,
ISNULL(SUM(SubmittedSum.SumInsured),0) AS TotalSubmittedSumInsured,
ISNULL(SUM(ApprovedSum.SumInsured),0) AS TotalApprovedSumInsured,
ISNULL(SUM(RejectedSum.SumInsured),0) AS TotalRejectedSumInsured,
ISNULL(SUM(PendingSum.SumInsured),0) AS TotalPendingSumInsured,
--This column is to show the diff in %
CASE WHEN COUNT(Submitted.ClaimNumber) <> 0 AND COUNT(ApprovalProvision.ClaimNumber) <> 0
THEN (COUNT(ApprovalProvision.ClaimNumber),0) - (COUNT(Submitted.ClaimNumber),0)
/COUNT(Submitted.ClaimNumber) * 100
ELSE 0
END

我需要的是显示 SubmittedClaims 和 ApprovedClaims 列之间的百分比差异。任何列或两者都可能包含零,也可能不包含零。

据我所知,它是:COUNT(Submitted.ClaimNumber) - COUNT(ApprovalProvision.ClaimNumber)/COUNT(Submitted.ClaimNumber) * 100。

我试过这个,它的一个例子是它接受 1 和 117,当 1 和 117 之间的差值减少 99.15% 时返回 17。另一个例子是 2 和 100。这只是返回 0,而差异是减少了 98%。

CASE WHEN COUNT(Submitted.ClaimNumber) <> 0 AND COUNT(ApprovalProvision.ClaimNumber) <> 0
THEN (COUNT(ApprovalProvision.ClaimNumber),0) - (COUNT(Submitted.ClaimNumber),0)
/COUNT(Submitted.ClaimNumber) * 100
ELSE 0
END

我检查了这个链接,这似乎是我正在做的。

Percentage difference between two values

我也试过这段代码:

NULLIF(COUNT(Submitted.ClaimNumber),0) - NULLIF(COUNT(ApprovalProvision.ClaimNumber),0) 
/ NULLIF(COUNT(Submitted.ClaimNumber),0) * 100

以 2 和 100 为例,当实际差异减少 98% 时返回 -4998。

为了完成,Submitted.ClaimNumber 是这部分代码:

LEFT OUTER JOIN (SELECT * FROM Company.Schema.ClaimMain WHERE CurrentStatus=10)Submitted
ON Submitted.ClaimNumber = ClaimMain.ClaimNumber

ApprovalProvision.ClaimNumber 是这样的:

LEFT OUTER JOIN (SELECT * FROM Company.Schema.ClaimMain WHERE CurrentStatus=15)ApprovalProvision
ON ApprovalProvision.ClaimNumber = ClaimMain.ClaimNumber

理想情况下,此列也将处理 0。因此,如果一个值为 0,另一个为 X,则结果应返回 0,因为如果原始数字为 0,则无法计算百分比。如果原始值为 X,新值为 0,我应该显示减少100%。

这将发生在所有列中,但不需要用其余列填充页面,因为所有计算都将以相同的方式发生。

有人看到我做错了什么吗?

最佳答案

我不明白你为什么用 (x,0) 作为语法

但是我看到你有

(COUNT(ApprovalProvision.ClaimNumber),0) - (COUNT(Submitted.ClaimNumber),0)
/COUNT(Submitted.ClaimNumber) * 100

不应该,

( COUNT(ApprovalProvision.ClaimNumber) - COUNT(Submitted.ClaimNumber) )
/COUNT(Submitted.ClaimNumber) * 100

看起来它会计算 ApprovalProvision.ClaimNumber - 100,因为 submitted.claimnumber 除以它本身是 1 乘以 100 是 100。

4900 这个数字听起来确实不错。举个例子,你有 2 个苹果,然后再给你 98 个,得到 100 个苹果。

增加 98% 意味着从 2 个苹果,您将有 3.96 个苹果。

增加 100% 意味着从 2 个苹果到 4 个苹果。增加 1000% 意味着从 2 个苹果到 22 个苹果。所以 4000% 意味着你最终得到 82 个苹果。 5000% 意味着从 2 个苹果,你达到 102 个苹果。

(100-2)/2*100 = 98/2 = 49 * 100 = 4900,所以看起来如果你从 2 个苹果开始到 100 个,苹果的数量增加了 4900%。

现在如果你翻转了 2 和 100,比如说从 100 开始,现在你有 2,(2-100)/100*100 = -98,所以苹果的变化为 -98%,即减少了 98%。

希望这能解决您的问题。

关于sql - 计算两个值之间的百分比,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51978661/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com