Получи случайную криптовалюту за регистрацию!

Деление целых чисел в PostgreSQL Когда мы делим одно целое чи | IT Resume

Деление целых чисел в PostgreSQL

Когда мы делим одно целое число на другое, мы всегда ожидаем увидеть правильный результат - даже если он дробный. Однако, в PostgreSQL это работает не так.

Простой пример:

select 1/2
# 0

В чем подвох?

Все очень просто - по умолчанию, в PostgreSQL деление целых чисел друг на друга дает также целое число:

select pg_typeof(1/2)
# integer

А в реальности это встречается?

Если говорить про практическую составляющую - это может негативно сказаться при расчете маржинальности, например:

select revenue/cost
# 0

Здесь и доход (revenue), и розничная цена (cost) представлены целыми числами, а маржинальность предполагается менее 100%.

Как быть?

Что делать и как избежать этой неприятной ошибки?

Очень просто - достаточно преобразовать числитель или знаменатель к дробному числу. Вот несколько способов:

* Умножить на дробное число (например, 1.0)
* Выполнить явное преобразование типов с помощью cast
* Выполнить преобразование типов с помощью ::

select 1*1.0/2
# 0.5

select cast(1 as numeric)/2
# 0.5

select 1::numeric/2
# 0.5

Мы обычно используем первый или третий варианты, т.к. второй просто объемней.

- - - - -
Еще больше фишечек вы узнаете в нашем Симуляторе по SQL https://vk.cc/cfT9wd