首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在sql中计算两列差值之和的百分比

如何在sql中计算两列差值之和的百分比
EN

Stack Overflow用户
提问于 2017-01-24 23:46:08
回答 3查看 3.1K关注 0票数 4

我在同一个表中有两列,这两列需要求和,得到差值,然后计算百分比?

代码语言:javascript
运行
复制
SELECT sum([BillCount]) - sum([IssueCount]) as [Difference]
FROM Invoice
where [Year] = '2015'

在上面的查询中,我得到的差值为244234。现在,我需要通过将差值除以实际的账单数260918来计算百分比。

示例数据:

代码语言:javascript
运行
复制
SELECT sum(BillCount) as bills, sum(IssueCount) as issues
FROM Invoice
where [Year] = '2015'

结果:票据: 260918期: 16684差额: 244234差额除以实际票据: 244234/260918 =0.93%:0.93x100=93.60%

我使用了从0到1的改变后的除数。但是我得到了许多行的百分比结果,比如每个单独的账单计数。有没有办法可以像我们在计算器中计算的那样,在一行中得到准确的百分比?谢谢。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-01-24 23:48:36

是像这样吗?

代码语言:javascript
运行
复制
SELECT sum([BillCount]) - sum([IssueCount]) as [Difference],
    (sum(IssueCount) - sum(BillCount)) / nullif(sum(BillCount), 0) as ptcdiff
FROM Invoice
where [Year] = '2015'

你会注意到我改变了减法的顺序。这使得它成为一个负面的变化,而不是一个积极的变化。如果你需要一个绝对的。更改,您只需在结果周围抛出abs()即可。如果这样做有意义,还可以将其烘焙到一个函数中。

代码语言:javascript
运行
复制
declare 
    @pctOld float = 260918,
    @pctNew float = 16684  

select PctDiff = case when @PctNew is null or @PctOld is null then null
                       when @PctNew = null or @PctOld = null then null
                       when @PctNew = 0 and @PctOld = 0 then 0    
                       when @PctNew = 0 and @PctOld > 0 then -100.00
                       when @PctNew >= 0 and @PctOld < 0 then null
                       when @PctNew < 0 and @PctOld > 0 then null
                       when @PctOld = 0 then null
                       else ((@PctNew - @PctOld) / abs(@PctOld)) * 100.0
                  end
票数 1
EN

Stack Overflow用户

发布于 2017-01-24 23:49:47

将当前表达式与SUM([BillCount])聚合值相除

像这样的东西

代码语言:javascript
运行
复制
select (sum([BillCount]) - sum([IssueCount])) / NULLIF(sum([BillCount]),0) * 100
FROM Invoice
where [Year] = '2015'
票数 0
EN

Stack Overflow用户

发布于 2017-01-24 23:54:49

像这样的子查询

代码语言:javascript
运行
复制
Select Difference/nullif(sum(BIllCount), 1) From (SELECT sum([BillCount]) - sum([IssueCount]) as [Difference],
FROM Invoice
where [Year] = '2015') Per
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41832378

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档