Sélectionnez requête personnalisée colonne calculée arrondis à 2 décimales

J'ai une table avec des colonnes a,b, j'ai besoin d'ajouter une colonne personnalisée c_avg qui aura de la valeur
c_avg = a*100/b jusqu'à 2 valeurs décimales

ma table d'origine est quelque chose comme cela

id a b
1  1 2
2  2 3
3  2 0

Je suis venu avec cette requête, mais il semble que cela me renvoie la valeur, en tant qu'entier.

select round( CAST((CASE WHEN b=0 THEN '0.00'
        ELSE round(((a*100)/b),2)
   END ) as numeric) , 2) as c_avg
from table_name

- je obtenir de sortie à ce que

a b c_avg
1 2 0
2 3 0

j'ai besoin de quelques chose comme cela

a b c_avg
1 2 0.50
2 3 0.66
2 0 0

Ma version de Postgresql sur amazon redshift est PostgreSQL 8.0.2

Il y a aussi quelques choses que je fais avec ce tableau

select sum(a) as aa, sum(b) as bb, groub_by_column
round( CAST((CASE WHEN sum(b)=0 THEN '0.00'
    ELSE round(((sum(a)*100)/sum(b)),2)
    END ) as numeric) , 2) as c_avg
from table group by groub_by_column

Cela me renvoie la valeur à 0 et pas à 0.*

Grâce

L'opération de division dans postgresql tronque à la valeur entière
juste trouvé que

select round((4000/576::float),3) as result;

l'ajout de méta ::float à l'opération de division donne le résultat souhaité, il ne tronque la sortie de valeur de type entier.
Grâce

OriginalL'auteur rohitmb | 2014-02-05