首页 > 解决方案 > SQL Server 中的百分比

问题描述

我想找到两列之间的百分比,我试过这个:

select
(count(id)* 100.0 /(select count(id) FROM db.table  where log = '40')) as percentage
from db.table;

结果是这样的:

418659.800405426477

为什么输出数字是这样的?还有什么方法可以让它看起来更好并帮助最终用户理解百分比?

标签: sqlsql-server

解决方案


输出是这样的,因为 SQL Server 在对数字进行算术运算时使用的规则——精度和小数位数相当详细(注意 1.0 是一个数字常量)。

对此的解释在文档中。请注意,即使我也不费心去理解除法规则。

我只想指出,您可以简化查询:

select avg(case when log = '40' then 100.0 else 0 end) as percentage
from db.table;

这只扫描表一次,所以它应该更快。但它应该产生类似的结果。

如果您想要给定的比例/精度,请使用、 、round()floor()转换为数字。ceil()str()


推荐阅读