캐스팅에 대한 이전 구문을 사용해보십시오.
SELECT ROUND(AVG(some_column)::numeric,2)
FROM table;
PostgreSQL의 모든 버전에서 작동합니다.
일부 PostgreSQL 함수 에는 오버로드가 부족한 이유는 무엇입니까? 왜?
추신 : 반올림에 대한 또 다른 요점은 정확성 입니다. @ IanKenney 's answer 확인하십시오 .
캐스팅 전략으로서의 과부하
다음 과 같이 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
추신 : \df round
과부하 후 점검 하면 다음과 같이 표시됩니다.
스키마 | 이름 | 결과 데이터 유형 | 인수 데이터 유형
------------ + ------- + ------------------ + ---------- ------------------
미스 테마 | 라운드 | 배정도 | 배정도, 텍스트, int
미스 테마 | 라운드 | 숫자 | 배정도, int
pg_catalog | 라운드 | 배정도 | 배정도
pg_catalog | 라운드 | 숫자 | 숫자
pg_catalog | 라운드 | 숫자 | 숫자, 정수
pg_catalog
기능은 기본 것들 볼 빌드 - 수학 함수의 매뉴얼 .