postgres round在某些​​情况下有效,但在其他情况下不行

时间:2018-10-21 05:55:27

标签: postgresql

我正在使用取整功能对数字进行取整。这是一个工作示例:

select round(3.0/5,1);

我有一个名为“ ratings”的表,其中除其他外还包含一个名为“ rank”的列。

这是示例命令及其输出:

=> select rank from ratings limit 5;
rank
------
8.6
8.3
7.7
  7
7.9
(5 rows)

我想要平均排名,所以我做了以下事情:

=> select avg(rank) from ratings;
avg
------------------
6.93997624861447
(1 row)

我想舍入这个结果,所以我做了以下事情:

=> select round(avg(rank)) from ratings;
round
-------
7
(1 row)

但是我想保留第一个小数位,所以我尝试了这个:

=> select round(avg(rank),1) from ratings;
ERROR:  function round(double precision, integer) does not exist
LINE 1: select round(avg(rank),1) from ratings;
               ^
HINT:  No function matches the given name and argument types. You might need to add explicit type casts.

我发现这样做确实非常奇怪,因为我已经测试过round(float,int)并且可以工作(请参见第一个示例)。当没有传递第二个参数时,round也似乎起作用。

请解释我在做什么错,以便我可以解决。谢谢

1 个答案:

答案 0 :(得分:1)

ROUND似乎适用于确切的数字类型,因此您可以尝试将平均值转换为数字:

select round(cast(avg(rank) as numeric), 1) from ratings

您使用的ROUND版本需要数字输入,请选中documentation