PostgreSQL で平均を小数点以下 2 桁に丸めるにはどうすればよいでしょうか? 質問する

PostgreSQL で平均を小数点以下 2 桁に丸めるにはどうすればよいでしょうか? 質問する

私は Ruby gem 'sequel' 経由で PostgreSQL を使用しています。

小数点第2位に丸めようとしています。

これが私のコードです:

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

私が何を間違っているのか誰か知っていますか?

ベストアンサー1

PostgreSQL は を定義しません。コメントで@Mike Sherrill 'Cat Recall'round(double precision, integer)が説明している理由により、精度を取る round のバージョンは でのみ使用できます。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の 2 つの引数形式を使用するには、丸められる値を にキャストする必要がありますround::numericのように、短縮キャストの場合は を追加するだけですround(val::numeric,2)


ユーザーに表示するためにフォーマットする場合は、 を使用しないでくださいround。 を使用してくださいto_char(参照:データ型書式設定関数マニュアルに記載されています) を使用すると、フォーマットを指定でき、textクライアント言語がnumeric値に対して行う奇妙な処理の影響を受けない結果が得られます。例:

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

to_charは、書式設定の一部として数値を丸めます。プレフィックスは、先頭のスペースによるパディングが不要であることをFM示します。to_char

おすすめ記事