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

zee*_*gon 54 sql postgresql division modulo

我有一个表software和列,作为dev_cost,sell_cost.如果dev_cost是16000并且sell_cost是7500.

如何找到要销售的软件数量以便恢复dev_cost

我查询如下:

select dev_cost / sell_cost from software ;
Run Code Online (Sandbox Code Playgroud)

它回答2作为答案.但我们需要得到3,对吧?

对此有什么疑问?提前致谢.

Ilm*_*nen 79

您的列具有整数类型,整数除法将结果截断为零.要获得准确的结果,您需要将至少一个值转换为float或decimal:

select cast(dev_cost as decimal) / sell_cost from software ;
Run Code Online (Sandbox Code Playgroud)

要不就:

select dev_cost::decimal / sell_cost from software ;
Run Code Online (Sandbox Code Playgroud)

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

select ceil(dev_cost::decimal / sell_cost) from software ;
Run Code Online (Sandbox Code Playgroud)

(参见关于SQLFiddle的演示.)

  • @MRah:很高兴为您提供帮助。:) 顺便说一句,您可以通过单击答案左上角的向上三角形图标来投票,而不是评论您认为有用的答案。这将奖励回答者声誉点,并让他们知道他们的回答受到赞赏,并且它也[帮助最佳答案上升到页面顶部。](http://stackoverflow.com/help/why-vote) (2认同)

Ada*_*Dev 8

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

 SELECT (dev_cost::numeric/sell_cost::numeric);
Run Code Online (Sandbox Code Playgroud)

您可以舍入您的 value ,并指定点后的位数:

SELECT TRUNC((dev_cost::numeric/sell_cost::numeric),2);
Run Code Online (Sandbox Code Playgroud)


Viv*_* S. 5

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

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

SELECT 16000::NUMERIC / 7500 col 
      ,ceil(16000::NUMERIC / 7500) 
Run Code Online (Sandbox Code Playgroud)

结果:

col                  ceil 
------------------   ---- 
2.1333333333333333     3    
Run Code Online (Sandbox Code Playgroud)

所以你的查询应该是

select ceil(dev_cost::numeric/sell_cost) 
from software
Run Code Online (Sandbox Code Playgroud)