gpt4 book ai didi

sql - 如何在 PostgreSQL 中将平均值四舍五入到小数点后两位?

转载 作者:行者123 更新时间:2023-11-29 13:48:00 27 4
gpt4 key购买 nike

我正在通过 Ruby gem“sequel”使用 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

有人知道我做错了什么吗?

最佳答案

PostgreSQL 没有定义round(double precision, integer)。由于 @Mike Sherrill 'Cat Recall' 在评论中解释的原因,采用精度的回合版本仅适用于 numeric

regress=> SELECT round( float8 '3.1415927', 2 );
ERROR: function round(double precision, integer) does not exist

regress=> \df *round*
List of functions
Schema | Name | Result data type | Argument data types | Type
------------+--------+------------------+---------------------+--------
pg_catalog | dround | double precision | double precision | normal
pg_catalog | round | double precision | double precision | normal
pg_catalog | round | numeric | numeric | normal
pg_catalog | round | numeric | numeric, integer | normal
(4 rows)

regress=> SELECT round( CAST(float8 '3.1415927' as numeric), 2);
round
-------
3.14
(1 row)

(在上面,注意 float8 只是 double precision 的简写别名。您可以看到 PostgreSQL 在输出中扩展了它)。

您必须将要四舍五入的值转换为 numeric 才能使用 round 的双参数形式。只需为速记形式附加 ::numeric,例如 round(val::numeric,2)


如果您要格式化以显示给用户,请不要使用 round。使用 to_char(请参阅手册中的 data type formatting functions),它允许您指定一种格式并为您提供一个 text 结果,该结果不受您的客户端语言的任何奇怪影响可能与 numeric 值有关。例如:

regress=> SELECT to_char(float8 '3.1415927', 'FM999999999.00');
to_char
---------------
3.14
(1 row)

to_char 将作为格式化的一部分为您舍入数字。 FM 前缀告诉 to_char 您不需要任何带有前导空格的填充。

关于sql - 如何在 PostgreSQL 中将平均值四舍五入到小数点后两位?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45295648/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com