PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Comment arrondir une moyenne à 2 décimales dans PostgreSQL ?

PostgreSQL ne définit pas round(double precision, integer) . Pour des raisons @Mike Sherrill 'Cat Recall' explique dans les commentaires, la version de round qui prend une précision n'est disponible que pour 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)

(Dans ce qui précède, notez que float8 est juste un alias abrégé pour double precision . Vous pouvez voir que PostgreSQL le développe dans la sortie).

Vous devez convertir la valeur à arrondir en numeric utiliser la forme à deux arguments de round . Ajoutez simplement ::numeric pour la version abrégée, comme round(val::numeric,2) .

Si vous formatez pour l'affichage à l'utilisateur, n'utilisez pas round . Utilisez to_char (voir :fonctions de formatage des types de données dans le manuel), qui vous permet de spécifier un format et vous donne un text résultat qui n'est pas affecté par les bizarreries que votre langage client pourrait faire avec numeric valeurs. Par exemple :

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

to_char arrondira les nombres pour vous dans le cadre du formatage. La FM le préfixe indique to_char que vous ne voulez pas de remplissage avec des espaces de début.