[SQL] 어떻게 PostgreSQL의 2 진수 곳으로 평균을 반올림?
SQL어떻게 PostgreSQL의 2 진수 곳으로 평균을 반올림?
나는 루비 보석 '속편'을 통해 PostgreSQL을 사용하고 있습니다.
나는 두 개의 소수점을 반올림하기 위해 노력하고있어.
여기 내 코드는 :
SELECT ROUND(AVG(some_column),2)
FROM table
나는 다음과 같은 오류가 발생합니다 :
PG::Error: ERROR: function round(double precision, integer) does
not exist (Sequel::DatabaseError)
나는 다음과 같은 코드를 실행 오류를 얻을 :
SELECT ROUND(AVG(some_column))
FROM table
아무도 내가 잘못하고있는 중이 야 무엇을 알고 있나요?
해결법
-
==============================
1.PostgreSQL은 (배정 밀도, 정수) 라운드 정의하지 않습니다. Sherrill '고양이 리콜'@ 마이크 이유로 코멘트에 설명, 정밀 소요 라운드의 버전 숫자 만 사용할 수 있습니다.
PostgreSQL은 (배정 밀도, 정수) 라운드 정의하지 않습니다. Sherrill '고양이 리콜'@ 마이크 이유로 코멘트에 설명, 정밀 소요 라운드의 버전 숫자 만 사용할 수 있습니다.
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)
(float8를 double 정밀도 단지 속기 별명입니다 위, 참고. 당신은 PostgreSQL의 출력에 확장되는 것을 볼 수 있습니다).
당신은 값을 캐스팅해야하는 라운드의 2 인자 양식을 사용하는 숫자로 반올림합니다. 라운드 같은 속기 캐스트에 대한 그냥 APPEND : 숫자 (발 :: 숫자, 2).
당신이 사용자에게 표시 포맷하는 경우, 라운드 사용하지 마십시오. 당신이 형식을 지정할 수 있습니다 당신에게 숫자 값으로 할 수있는 클라이언트 언어를 불확실성 어떤 영향을받지 않는 텍스트 결과를 제공, : 사용 TO_CHAR (데이터 유형 매뉴얼에 기능을 서식 참조). 예를 들면 :
regress=> SELECT to_char(float8 '3.1415927', 'FM999999999.00'); to_char --------------- 3.14 (1 row)
서식의 일부로서 당신을위한 TO_CHAR는 것이다 라운드 번호. FM 접두사는 선행 공백과 패딩을 원하지 않는 TO_CHAR를 알려줍니다.
-
==============================
2.주조 또한 이전 구문을 시도,
주조 또한 이전 구문을 시도,
SELECT ROUND(AVG(some_column)::numeric,2) FROM table;
PostgreSQL의 모든 버전에서 작동합니다.
일부 PostgreSQL의 기능에 과부하의 부족이있다, 왜 (???) : (!) 나는 "그것이 부족"하지만 @CraigRinger, @Catcall과 PostgreSQL의 팀이 "페이지의 역사적인 근거"에 대해 동의합니다 생각합니다.
PS : 반올림에 대한 또 다른 점은 정확성, 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
하지만, 텍스트 매개 변수를 제공 할 때 우리는 FLOAT 타입을 반환 할 수 있습니다 첫 번째 commom-사용 과부하를 유지하려면 ... 숫자 형식을 반환
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 명령 \ 확인
Schema | Name | Result data type | Argument data types ------------+-------+------------------+---------------------------- myschema | round | double precision | double precision, text, int myschema | round | numeric | double precision, int pg_catalog | round | double precision | double precision pg_catalog | round | numeric | numeric pg_catalog | round | numeric | numeric, int
pg_catalog 기능은 기본 것들입니다 빌드 - 수학 함수의 매뉴얼을 참조하십시오.
-
==============================
3.이것으로 시도 :
이것으로 시도 :
SELECT to_char (2/3::float, 'FM999999990.00'); -- RESULT: 0.67
또는 단순히 :
SELECT round (2/3::DECIMAL, 2)::TEXT -- RESULT: 0.67
-
==============================
4.아래의 기능을 사용할 수 있습니다
아래의 기능을 사용할 수 있습니다
SELECT TRUNC(14.568,2);
결과가 표시됩니다 :
14.56
당신은 또한 욕망의 유형에 변수를 캐스트 할 수 있습니다 :
SELECT TRUNC(YOUR_VAR::numeric,2)
-
==============================
5.브라이언의 반응에 따라 당신은 쿼리의 소수를 제한하기 위해이 작업을 수행 할 수 있습니다. 나는 m / s로의 km / h로 변환하고 dygraphs에 표시하지만 dygraphs 그것을했을 때 그것은 이상한 보였다. 대신 쿼리에서 계산을 수행 할 때 외모는 미세. 이것은 PostgreSQL의 9.5.1에 있습니다.
브라이언의 반응에 따라 당신은 쿼리의 소수를 제한하기 위해이 작업을 수행 할 수 있습니다. 나는 m / s로의 km / h로 변환하고 dygraphs에 표시하지만 dygraphs 그것을했을 때 그것은 이상한 보였다. 대신 쿼리에서 계산을 수행 할 때 외모는 미세. 이것은 PostgreSQL의 9.5.1에 있습니다.
select date,(wind_speed/3.6)::numeric(7,1) from readings;
-
==============================
6.같은 숫자에 열을 주조하십시오 :
같은 숫자에 열을 주조하십시오 :
SELECT ROUND(cast(some_column as numeric),2) FROM table
-
==============================
7.해결 방법 : 다음은 작동합니다 당신은 AddType 지정 캐스트 필요
해결 방법 : 다음은 작동합니다 당신은 AddType 지정 캐스트 필요
예 : 라운드 ((초) job_end_time_t에서 추출 :: 정수, 0)
from https://stackoverflow.com/questions/13113096/how-to-round-an-average-to-2-decimal-places-in-postgresql by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 관계형 데이터베이스 및 그래프 데이터베이스의 비교 (0) | 2020.05.18 |
---|---|
[SQL] 열이 비어 있지 않은 위치를 선택 MYSQL (0) | 2020.05.18 |
[SQL] 내부는 세 개의 테이블을 조인 (0) | 2020.05.18 |
[SQL] 어떻게 오라클에서 사용자의 모든 권한을 보여? (0) | 2020.05.18 |
[SQL] 언제 대신 SQL의 XML을 사용해야합니까? [닫은] (0) | 2020.05.18 |