sql - SQL Server 中的百分比
问题描述
我想找到两列之间的百分比,我试过这个:
select
(count(id)* 100.0 /(select count(id) FROM db.table where log = '40')) as percentage
from db.table;
结果是这样的:
418659.800405426477
为什么输出数字是这样的?还有什么方法可以让它看起来更好并帮助最终用户理解百分比?
解决方案
输出是这样的,因为 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()
推荐阅读
- scala - 将列表+列表列表转换为地图列表
- sql - 通过 wp_get_nav_menu_items 在 wordpress 中使用自定义 sql 查询来提高 wp_posts 中的查询性能
- javascript - 为什么JS中没有显示暂停图标
- azure - Azure AD B2C 注册和登录页面的自定义 URL
- regex - 尝试在 Google Data Studio 中创建一个仅在列表名称以 US 开头时才计算在内的字段
- python - 使用 Tkinter 在 python 中的选项菜单中添加分隔符
- reactjs - 元素类型无效 React
- ios - 只允许一个用户点击推送通知
- python - 如何使用 Django-forms 将信息附加到 URL 的末尾?
- java - 查找加起来等于给定总和的最小子数组(允许重复)