Отдел (/) не дает ответа в 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);