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的演示.)
您还可以将变量转换为所需的类型,然后应用除法:
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)
您可以将整数类型转换为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)