Redshift division result does not include decimals Redshift division result does not include decimals sql sql

Redshift division result does not include decimals


It is integer division. Make sure that at least one argument is: NUMERIC(accurate data type)/FLOAT(caution: it's approximate data type):

/ division (integer division truncates the result)

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

DBFiddle Demo


When mixing data types the order counts

Note that the order of the elements in a math expression counts for the data type of the result.
Let's assume that we intend to calculate the percentage unit_sales/total_sales where both columns (or numbers) are integers.

See and try with this code here.

-- Some dummy tabledrop table if exists sales;create table sales as     select 3 as unit_sales, 9 as total_sales;-- The calculationsselect    unit_sales/total_sales*100,   --> 0 (integer)    unit_sales/total_sales*100.0, --> 0.0 (float)    100.0*unit_sales/total_sales  --> 33.3 (float and expected result)from sales;

The output

  0 | 0.0 | 33.33
  1. The first column is 0 (integer) because of 3/9=0 in an integer division.
  2. The second column is 0.0 because SQL first got the integer 0 (3/9), and later, SQL converts it to float in order to perform the multiplication by 100.0.
  3. The expected result.
    The non-integer 100.0 at the beginning of the expression force a non-integer calculation.