Результат деления Redshift не включает десятичные дроби - PullRequest
0 голосов
/ 23 мая 2018

Я пытаюсь сделать что-то действительно простое, чтобы вычислить процентное соотношение между двумя столбцами в Redshift.Однако, когда я запускаю запрос с примером, результат просто равен нулю, потому что десятичные дроби не покрываются.

код:

select 1701 / 84936;

Вывод:

enter image description here

Я пытался:

select cast(1701 / 84936 as numeric (10,10));

но результат был 0.0000000000.

Как я мог решить эту глупую вещь?

Ответы [ 2 ]

0 голосов
/ 12 июля 2019

При смешивании типов учитывается порядок

Также обратите внимание, что учитывается порядок чисел в математическом выражении.
Предположим, что мы намереваемся вычислить процент unit_sales/total_sales, где оба столбца (или числа)) являются целыми числами.

Код (http://tpcg.io/RMzCvL)

-- Some dummy table
drop table if exists sales;
create table sales as 
    select 3 as unit_sales, 9 as total_sales;

-- The calculations
select
    unit_sales/total_sales*100,
    unit_sales/total_sales*100.0,
    100.0*unit_sales/total_sales
from sales;

Выход

  0 | 0.0 | 33.33
  1. Первый столбец 0 (целое число), потому что 3/9= 0 в целочисленном делении.
  2. Второй столбец равен 0,0, потому что сначала мы получили целое число 0, затем мы конвертируем его в нецелое число.
  3. Ожидаемый результат. Нецелое число 100,0вызовет нецелочисленный расчет.
0 голосов
/ 23 мая 2018

Это целочисленное деление.Убедитесь, что хотя бы один аргумент: NUMERIC (точный тип данных) / FLOAT (осторожно: это приблизительный тип данных):

/ деление (целочисленное деление усекает результат)

select 1701.0 / 84936;
-- or
SELECT 1.0 * 1701 / 84936;
-- or
SELECT CAST(1701 AS NUMERIC(10,4))/84936;

DBFiddle Demo

...