web-dev-qa-db-fra.com

Le résultat de la division Redshift n'inclut pas les décimales

J'essaie de faire quelque chose de très simple pour calculer une sorte de pourcentage entre deux colonnes dans Redshift. Cependant, lorsque j'exécute la requête avec un exemple, le résultat est tout simplement zéro car les décimales ne sont pas couvertes.

code:

select 1701 / 84936;

Production:

enter image description here

J'ai essayé :

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

mais le résultat était 0.0000000000.

Comment pourrais-je résoudre cette chose idiote?

11

C'est une division entière. Assurez-vous qu'au moins un argument est: NUMERIC (type de données précis)/FLOAT (attention: il s'agit d'un type de données approximatif):

/division (la division entière tronque le résultat)

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

Démo DBFiddle

11
Lukasz Szozda

Lors du mélange des types, la commande compte

Notez également que l'ordre des nombres dans l'expression mathématique compte.
Supposons que nous avons l'intention de calculer le pourcentage unit_sales/total_sales où les deux colonnes (ou nombres) sont des entiers.

Le code ( 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;

Le résultat

  0 | 0.0 | 33.33
  1. La première colonne est 0 (entier) car 3/9 = 0 dans une division entière.
  2. La deuxième colonne est 0,0 car nous avons d'abord obtenu le nombre entier 0, puis nous le convertissons en un non-entier.
  3. Le résultat attendu. Le non entier 100,0 forcera un calcul non entier.
0
ePi272314