组织没有在事后给我答复

我有一个 software表,其中的列是 dev_costsell_cost。如果 dev_cost是16000和 sell_cost是7500,我如何找到软件出售的数量,以恢复 dev_cost

我的疑问如下:

select dev_cost / sell_cost from software ;

它返回2作为答案,但是我们需要得到3,对吗?

这个问题的答案是什么?

130688 次浏览

你的列有整数类型和 整数除法将结果截断为零。为了得到一个准确的结果,你需要 将至少一个值强制转换为浮点或十进制:

select cast(dev_cost as decimal) / sell_cost from software ;

或者只是:

select dev_cost::decimal / sell_cost from software ;

然后,您可以使用 ceil()函数将结果四舍五入为最接近的整数:

select ceil(dev_cost::decimal / sell_cost) from software ;

(见 在 SQLFiddle 上演示)

此查询将结果舍入为下一个整数

select round(dev_cost ::decimal / sell_cost + 0.5)

您可以将整数类型转换为 numeric并使用 ceil()函数来获得所需的输出

PostgreSQL ceil 函数返回的最小整数值 大于或等于一个数。

SELECT 16000::NUMERIC / 7500 col
,ceil(16000::NUMERIC / 7500)

结果:

col                  ceil
------------------   ----
2.1333333333333333     3

所以你的问题应该是

select ceil(dev_cost::numeric/sell_cost)
from software

还可以将变量强制转换为所需的类型,然后应用除法:

 SELECT (dev_cost::numeric/sell_cost::numeric);

您可以四舍五入您的值,并指定数字的数字后点:

SELECT TRUNC((dev_cost::numeric/sell_cost::numeric),2);