将数字结果转换为带小数位的百分比

时间:2015-10-18 23:01:36

标签: sql postgresql casting aggregate-functions percentage

我有这个问题:

Select count(incidentnumber) as average
from incidents
Where IncidentStationGround <> firstpumparriving_deployedfromstation;

我得到了一个结果,它有点像20,000。但是如何将此数字转换为百分比?另外,我希望结果为十进制,可以吗?

2 个答案:

答案 0 :(得分:1)

您在评论中的查询应该有效 将计数转换为十进制以实现小数百分比

count(incidentnumber)::decimal*100

答案 1 :(得分:0)

假设总数的百分比:

SELECT (count(incidentnumber) FILTER (WHERE IncidentStationGround <> firstpumparriving_deployedfromstation)
        * 100.0) / count(*) AS average
FROM   incidents;

将结果乘以numeric常量:100.0(带小数点!),以隐式地将bigint count()的结果转换为numeric。您也可以使用显式广播。

round()是可选的。你也可以只返回许多小数位数。

还假设incidentnumber被定义为NOT NULL,因此count(*)count(incidentnumber)的行为相同,速度更快。表定义将提供该信息。

假设您正在运行当前版本9.4(您也忘了提供它)。相关答案与链接和旧版本的替代:

关于round()numeric