SQL 计算限制为 6 位小数

问题描述

我正在尝试使用分区来计算总数的百分比,并且需要计算结果超过 6 位小数。我有数百万条记录,因此我需要将计算扩展到小数点后 6 位以求和为总数的 100%。

我尝试将结果转换为 18 位小数,但我仍然得到小数点后第 6 位以外的所有零。

任何帮助将不胜感激!

=ArrayFormula(if(len(A2:A),countifs(A2:A,"<>",row(A2:A),"<="&row(A2:A)),))

[结果截图]

1

更新:感谢您的回复!我尝试将所有内容都转换为十进制(分子、分母和结果),但仍然在小数点后第 6 位全为零。也许问题出在 Partition by 上?

SELECT
     ISNULL(SUM(c.PaidOriginal),0)  / SUM(NULLIF(SUM(c.PaidOriginal),0) ) OVER (PARTITION BY c.calyr) AS percentoftotal,CAST(ISNULL(SUM(c.PaidOriginal),0) ) OVER (PARTITION BY c.calyr) AS DECIMAL(38,18)) AS percentoftotal
FROM c

解决方法

在除法之前将第一个或第二个数字转换为您想要的精度:

SELECT
     ISNULL(SUM(c.PaidOriginal),0)  / SUM(NULLIF(SUM(c.PaidOriginal),0) ) OVER (PARTITION BY c.calyr) AS percentoftotal,CAST(ISNULL(SUM(c.PaidOriginal),0) AS DECIMAL(38,18)) / SUM(NULLIF(SUM(c.PaidOriginal),0) ) OVER (PARTITION BY c.calyr)  AS percentoftotal
FROM c

dbfiddle here

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...