キャストの古い構文も試してください。
SELECT ROUND(AVG(some_column)::numeric,2)
FROM table;
どのバージョンのPostgreSQLでも動作します。
一部のPostgreSQL関数にはオーバーロードが不足していますが、なぜですか(???):「不足している」(!)
PS:丸めに関するもう1つのポイントは精度です。@ IanKenneyの回答を確認してください。
キャスト戦略としてのオーバーロード
ROUND関数をオーバーロードできます。
CREATE FUNCTION ROUND(float,int) RETURNS NUMERIC AS $$
SELECT ROUND($1::numeric,$2);
$$ language SQL IMMUTABLE;
今、あなたの指示はうまく機能します、試してください(関数作成後)
SELECT round(1/3.,4); -- 0.3333 numeric
しかし、NUMERICタイプを返します...最初のcommom-usageオーバーロードを保持するために、TEXTパラメータが提供されたときにFLOATタイプを返すことができます。
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;
試す
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:\df round
オーバーロード後にチェックすると、次のように表示されます、
スキーマ| 名前| 結果のデータ型| 引数のデータ型
------------ + ------- + ------------------ + ---------- ------------------
myschema | ラウンド| 倍精度| 倍精度、テキスト、整数
myschema | ラウンド| 数値| 倍精度、int
pg_catalog | ラウンド| 倍精度| 倍精度
pg_catalog | ラウンド| 数値| 数値
pg_catalog | ラウンド| 数値| 数値、整数
pg_catalog
機能は、デフォルトのものであり参照ビルドで数学関数のマニュアル。