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
Vous devez vous connecter pour publier un commentaire.
L'opération de division dans postgresql tronque à la valeur entière juste trouvé que
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
Tout en travaillant sur des entiers, le résultat est également un entier multiplier par une valeur float pour obtenir un flotteur résultat:
J'ai élargi ma solution pour inclure également le GROUPE de la partie
OriginalL'auteur Tomasz Tybulewicz
Postgres n'division entière, alors essayez cette version de votre requête:
Vous pouvez également le faire en convertissant le résultat à une décimale:
Veuillez vérifier d'autres détails
est une largeur fixe de type numérique. C'est une alternative à
round()
et une partie de la norme SQL.OriginalL'auteur Gordon Linoff
Essayer avec ceci:
Ou tout simplement:
OriginalL'auteur atiruz
vous avez besoin de cast
vous êtes dans l'erreur. Je test et sélectionner round( (2/3::numeric), 2) produit de 0,67
dépend de la version de postgresql, j'ai auditionné avec 4 versions différentes
La question est sur postgres 8.0.2. voir plus postgresql.org/docs/8.0/static/functions-math.html
OriginalL'auteur d345k0