sql - SQL“不正确”的列计算
问题描述
我有一个计算列,它给我的结果与使用其他列的手动计算不同。
SELECT VG.avg_tax,
VP2.prop * (S.points / 100) / (NULLIF(CAST(VG.avg_tax AS DECIMAL(7 , 2)) , 0)) AS net_points,
VP2.prop ,
S.points,
(NULLIF(CAST(VG.avg_tax AS DECIMAL(7 , 2)) , 0)) AS divisio ,
VP2.new_tax
这是代码的第一部分,我认为是错误所在。
结果是:
+---------+------------+------+--------+----------+----------+
| avg_tax | net_points | prop | points | divisio | new_tax |
+---------+------------+------+--------+----------+----------+
| 1.23 | 43.902439 | 1 | 5442 | 1.23 | 23 |
+---------+------------+------+--------+----------+----------+
如您所见,通过手工计算,net_points 处的结果应为:5442/100 * 1 / 1.23 = 44.2439。
为什么会这样?
解决方案
您不指定数据库或数据类型,但某些数据库会进行整数除法。作为一种习惯,我通常在常量中包含小数点以确保:
VP2.prop * (S.points / 100.0) / (NULLIF(CAST(VG.avg_tax AS DECIMAL(7 , 2)) , 0)) AS net_points,
推荐阅读
- c# - 有没有办法可以从一些文本和参数列表中创建一个字符串?
- c# - 从另一个程序打开 Solidworks PDM 目录
- powershell - 如何过滤 Get-ADComputer 输出
- docker - 在 Mesos / Marathon 中设置默认的 docker run 参数
- spring - SchemaCollection 上的多个 XSD:schemaElement 不能为空?
- vb.net - DataGridView:如何使回车键添加新行而不是更改当前单元格?[视觉基础]
- django - 如何根据用户在 Django ListView 中单击的内容设置字段值
- php - Laravel:如何创建产品变体组合并存储在数据库中
- reactjs - 如何迁移到 react-redux-firebase v3
- xcode - 如何在 Xcode AppleScript 应用程序中使用系统图标?