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

时间:2015-12-29 04:38:28

标签: sql postgresql division modulo

我有一个表{ "batting_order": [ [ "b", "1" ], [ "a", "1" ] ] } ,其中的列为softwaredev_cost。如果sell_cost为16000且dev_cost为7500。

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

我查询如下:

dev_cost

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

对此的查询是什么?提前谢谢。

4 个答案:

答案 0 :(得分:50)

您的列包含整数类型,integer division truncates the result towards zero。要获得准确的结果,您需要cast at least one of the values to float or decimal

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

答案 1 :(得分:4)

您可以将整数类型转换为SELECT 16000::NUMERIC / 7500 col ,ceil(16000::NUMERIC / 7500) 并使用ceil()函数获取所需的输出

  

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

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

结果:

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

所以你的查询应该是

var Fibonacci = (function() {
  var _Fibonacci = {
    // set initial values
    result: [0, 1, 1],
    input: 0,

    // main function
    find: function (number) {
      this.input = number;

      if (this.isValid()) {
        this.calculate();
        return this.result.pop();
      }

      return 'Invalid input';
    },

    // sub functions
    isValid: function () {
      return this.input != 0
    },

    calculate: function () {
      for (var i=2; i<this.input; i++) { // fix your code here
        this.result[i+1] = this.result[i] + this.result[i-1];
      }
    }
  };
  
  // return the main function
  return _Fibonacci.find.bind(_Fibonacci);
}());

console.log(
  Fibonacci(0),
  Fibonacci(4),
  Fibonacci(6)
);

答案 2 :(得分:1)

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

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

答案 3 :(得分:1)

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

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

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

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