分区 ( / ) 没有在 postgresql 中给出我的答案

Division ( / ) not giving my answer in postgresql

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

我查询如下:

select dev_cost / sell_cost from software ;

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

查询的内容是什么?

您的列是整数类型,integer division truncates the result towards zero. To get an accurate result, you'll need to :

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 ;

(参见 demo on SQLFiddle。)

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

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

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

The PostgreSQL ceil function returns the smallest integer value that is greater than or equal to a number.

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);