Отдел (/) не дает ответа в postgresql

У меня есть таблица software и столбцы в ней как dev_cost, sell_cost. Если dev_cost - 16000, а sell_cost - 7500.

Как найти количество программного обеспечения для продажи, чтобы восстановить dev_cost?

Я запросил следующее:

select dev_cost / sell_cost from software ;

Он возвращает 2 в качестве ответа. Но нам нужно получить 3, правильно?

Каким будет запрос? Спасибо заранее.

Ответ 1

У ваших колонок есть целые типы, а целочисленное деление обрезает результат до нуля. Чтобы получить точный результат, вам нужно отбросить хотя бы одно из значений в float или 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 ;

(См. демо на SQLFiddle.)

Ответ 2

Вы можете применить целочисленный тип к 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

Ответ 3

Этот запрос будет округлять результат до следующего целого числа

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

Ответ 4

Вы также можете привести свою переменную к типу желаний, а затем применить деление:

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

Вы можете округлить свое значение и указать число после запятой:

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