sql >> Database teknologi >  >> RDS >> PostgreSQL

Hvordan afrundes et gennemsnit til 2 decimaler i PostgreSQL?

PostgreSQL definerer ikke round(double precision, integer) . Af årsager @Mike Sherrill 'Cat Recall' forklarer i kommentarerne, den version af runden, der tager en præcision, er kun tilgængelig for 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)

(Bemærk i ovenstående, at float8 er kun et stenografisk alias for double precision . Du kan se, at PostgreSQL udvider det i outputtet).

Du skal caste værdien for at blive afrundet til numeric at bruge to-argumentformen round . Du skal blot tilføje ::numeric for stenografien cast, som round(val::numeric,2) .

Hvis du formaterer til visning for brugeren, skal du ikke bruge round . Brug to_char (se:datatypeformateringsfunktioner i manualen), som lader dig specificere et format og giver dig en text resultat, der ikke er påvirket af den underlighed dit klientsprog måtte gøre med numeric værdier. For eksempel:

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

to_char vil afrunde tal for dig som en del af formateringen. FM præfiks fortæller to_char at du ikke ønsker noget polstring med mellemrum foran.



  1. Tilslut tabeller med SUM-problem i MYSQL

  2. Hvordan bruger man Array/Table Parameter til Oracle (ODP.NET 10g) via ADO.NET/C#?

  3. Hent det sidst indsatte række-id (med SQL-sætning)

  4. Fremmednøgle til ikke-primær nøgle