Pruebe también la antigua sintaxis para emitir,
SELECT ROUND(AVG(some_column)::numeric,2)
FROM table;
funciona con cualquier versión de PostgreSQL.
Hay una falta de sobrecargas en algunas funciones de PostgreSQL, ¿por qué (???): Creo que "es una falta" (!), Pero @CraigRinger, @Catcall y el equipo de PostgreSQL están de acuerdo sobre la "razón histórica de pg".
PD: otro punto sobre el redondeo es la precisión , verifique la respuesta de @ IanKenney .
Sobrecarga como estrategia de lanzamiento
Puede sobrecargar la función REDONDA con,
CREATE FUNCTION ROUND(float,int) RETURNS NUMERIC AS $$
SELECT ROUND($1::numeric,$2);
$$ language SQL IMMUTABLE;
Ahora su instrucción funcionará bien, intente (después de la creación de la función)
SELECT round(1/3.,4); -- 0.3333 numeric
pero devuelve un tipo NUMÉRICO ... Para preservar la primera sobrecarga de uso común, podemos devolver un tipo FLOAT cuando se ofrece un parámetro TEXT,
CREATE FUNCTION ROUND(float, text, int DEFAULT 0)
RETURNS FLOAT AS $$
SELECT CASE WHEN $2='dec'
THEN ROUND($1::numeric,$3)::float
-- ... WHEN $2='hex' THEN ... WHEN $2='bin' THEN... complete!
ELSE 'NaN'::float -- like an error message
END;
$$ language SQL IMMUTABLE;
Tratar
SELECT round(1/3.,'dec',4); -- 0.3333 float!
SELECT round(2.8+1/3.,'dec',1); -- 3.1 float!
SELECT round(2.8+1/3.,'dec'::text); -- need to cast string? pg bug
PD: comprobar \df round
después de sobrecargas, mostrará algo como,
Esquema | Nombre | Tipo de datos de resultado | Tipos de datos de argumentos
------------ + ------- + ------------------ + ---------- ------------------
myschema | ronda | doble precisión | doble precisión, texto, int
myschema | ronda | numérico | doble precisión, int
pg_catalog | ronda | doble precisión | Precisión doble
pg_catalog | ronda | numérico | numérico
pg_catalog | ronda | numérico | numérico, int
Las pg_catalog
funciones son las predeterminadas, consulte el manual de funciones matemáticas integradas .