我通过Ruby宝石“续集”使用PostgreSQL。

我要四舍五入到小数点后两位。

这是我的代码:

SELECT ROUND(AVG(some_column),2)    
FROM table

我得到以下错误:

PG::Error: ERROR:  function round(double precision, integer) does 
not exist (Sequel::DatabaseError)

当我运行以下代码时,我没有得到错误:

SELECT ROUND(AVG(some_column))
FROM table

有人知道我哪里做错了吗?


当前回答

试着把你的列转换成一个数字:

SELECT ROUND(cast(some_column as numeric),2) FROM table

其他回答

试试这个:

SELECT to_char (2/3::float, 'FM999999990.00');
-- RESULT: 0.67

或者仅仅是:

SELECT round (2/3::DECIMAL, 2)::TEXT
-- RESULT: 0.67

根据Bryan的回答,您可以这样做来限制查询中的小数。我把km/h转换成m/s,然后用动态图表示,但是用动态图表示的时候看起来很奇怪。在查询中进行计算时看起来很好。这是在postgresql 9.5.1上。

select date,(wind_speed/3.6)::numeric(7,1) from readings;

您可以使用下面的函数

 SELECT TRUNC(14.568,2);

结果将显示:

14.56

你也可以将变量转换为期望类型:

 SELECT TRUNC(YOUR_VAR::numeric,2)

错误:函数圆(双精度,整数)不存在

解决方案:你需要添加类型转换,然后它将工作

例:round(extract(second from job_end_time_t)::integer,0)

SELECT ROUND(SUM(amount)::numeric, 2) AS total_amount
FROM transactions

为:200234.08