Postgresql:计算百分比,但铸造不会';行不通

Postgresql:计算百分比,但铸造不会';行不通,postgresql,sqldatatypes,Postgresql,Sqldatatypes,我在下面的查询中尝试对列进行算术运算。我已经根据postgres文档使用了正确的强制转换,但是()但是有人仍然在我的bigint列中剪切结果,并避免在结果集中使用小数点 select * from ( select (degree_one + degree_two) as degree_easy, degree_three as degree_hard, (((degree_one + degree_two)/(degree_one + degree_

我在下面的查询中尝试对列进行算术运算。我已经根据postgres文档使用了正确的强制转换,但是()但是有人仍然在我的bigint列中剪切结果,并避免在结果集中使用小数点

select * from (
    select (degree_one + degree_two) as degree_easy, 
        degree_three as degree_hard, 
        (((degree_one + degree_two)/(degree_one + degree_two + degree_three))::decimal) as easy_percent, ((degree_three/(degree_one + degree_two + degree_three))::decimal) as hard_percent from recommendation_degree
    ) as dc 
where dc.degree_easy >= 4 and dc.degree_hard >= 4

我做错了什么?除了十进制,我还尝试了float和real,但它们都给出了相同的结果。

您可以尝试在除法中强制计算十进制值,否则我认为您将最终执行整数除法(然后将除法转换为十进制),结果将不正确

试试这个:

select * from (
  select (degree_one + degree_two) as degree_easy,
  degree_three as degree_hard,
  (degree_one::decimal + degree_two::decimal)/(degree_one::decimal + degree_two::decimal + degree_three::decimal) as easy_percent, 
  degree_three::decimal/(degree_one::decimal + degree_two::decimal + degree_three::decimal) as hard_percent 
  from recommendation_degree
    ) as dc 
where dc.degree_easy >= 4 and dc.degree_hard >= 4
可能没有必要同时计算除数和除数,我认为当只计算除数时,它应该会起作用


实际按照我想要的方式使用x::real work。我用了你的符号,但把小数换成了实数。