I have a table with some columns a,b, i need to add a custom column c_avg which will have the value c_avg = a*100/b upto 2 decimal values
my original table is some thing like this
id a b
1 1 2
2 2 3
3 2 0
I have come up with this query but seems as this returns me value as integer.
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
i get output to this as
a b c_avg
1 2 0
2 3 0
i need some thing like this
a b c_avg
1 2 0.50
2 3 0.66
2 0 0
My Postgresql version on amazon redshift is PostgreSQL 8.0.2
There is also a few things I'm doing with this table
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
This returns me value to 0 and not to 0.*
Thanks
The division operation in postgresql truncates to integer value just found that
select round((4000/576::float),3) as result;
adding meta ::float to the division operation gives the desired result, it does not truncates the output to integer value. Thanks