Experimente também a sintaxe antiga para transmissão,
SELECT ROUND(AVG(some_column)::numeric,2)
FROM table;
funciona com qualquer versão do PostgreSQL.
Faltam sobrecargas em algumas funções do PostgreSQL, por que (???): Eu acho que "é uma falta" (!), Mas @CraigRinger, @Catcall e a equipe do PostgreSQL concordam com a "lógica histórica da pg".
PS: outro ponto sobre o arredondamento é a precisão , verifique a resposta de @ IanKenney .
Sobrecarga como estratégia de fundição
Você pode sobrecarregar a função ROUND com,
CREATE FUNCTION ROUND(float,int) RETURNS NUMERIC AS $$
SELECT ROUND($1::numeric,$2);
$$ language SQL IMMUTABLE;
Agora sua instrução funcionará bem, tente (após a criação da função)
SELECT round(1/3.,4); -- 0.3333 numeric
mas retorna um tipo NUMERIC ... Para preservar a primeira sobrecarga de uso comum, podemos retornar um tipo FLOAT quando um parâmetro TEXT é oferecido,
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;
Experimentar
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
PS: verificação \df round
após sobrecargas, mostrará algo como,
Esquema Nome | Tipo de dados do resultado | Tipos de dados do argumento
------------ + ------- + ------------------ + ---------- ------------------
myschema rodada | precisão dupla | precisão dupla, texto, int
myschema rodada | numérico | precisão dupla, int
pg_catalog | rodada | precisão dupla | dupla precisão
pg_catalog | rodada | numérico | numérico
pg_catalog | rodada | numérico | numérico, int
As pg_catalog
funções são as padrão, consulte o manual das funções matemáticas integradas .