sql >> データベース >  >> RDS >> PostgreSQL

PostgreSQLで平均を小数点以下2桁に丸める方法は?

    PostgreSQLはround(double precision, integer)を定義していません 。理由@MikeSherrill'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の2つの引数形式を使用するには 。 ::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に通知します 先頭にスペースを入れたくないこと。



    1. 10進数のデータ型(MySQL / Postgres)を使用するとパフォーマンスが低下しますか?

    2. MySQL、ユーザーランクを取得

    3. WHERE IN...INTリストのDB.executeにパラメータを渡します

    4. データカタログ、ビジネス用語集、およびデータガバナンスを介して顧客のビジネスインテリジェンスを有効にする