결과를 나누기 위한 SQL의 십진수 값
SQL에서, 나는col1
그리고.col2
둘 다 정수입니다.
다음과 같은 작업을 수행합니다.
select col1/col2 from tbl1
나는 결과를 얻습니다.1
어디에col1=3
그리고.col2=2
내가 원하는 결과는1.1
내가 넣었습니다round(col1/col2,2)
결과는 여전히 1입니다.
내가 넣었습니다decimal(col1/col2,2)
소수점은 함수에 내장되어 있지 않습니다.
정확히 어떻게 하면 1.1점을 받을 수 있습니까?
또 다른 접근 방식:
SELECT col1 * 1.0 / col2 FROM tbl1
1.0을 곱하면 정수가 부동 숫자(13,1)로 변하기 때문에 유형캐스트처럼 작동하지만 대부분은 이보다 느립니다.
알렉산드르 페도렌코는 논평에서 약간 더 짧은 변형을 제안했습니다.
SELECT col1 * 1. / col2 FROM tbl1
효과는 기본적으로 동일합니다.유일한 차이점은 이 경우의 곱셈 결과가 숫자(12,0)라는 것입니다.
주요 장점: 다른 접근 방식보다 말이 적습니다.
분할하기 전에 값을 10진수로 캐스팅하거나 변환해야 합니다.이 http://msdn.microsoft.com/en-us/library/aa226054.aspx 을 살펴보십시오.
예를들면
DECLARE @num1 int = 3 DECLARE @num2 int = 2
SELECT @num1/@num2
SELECT @num1/CONVERT(decimal(4,2), @num2)
첫 번째 SELECT를 선택하면 표시되는 내용이 표시되고 두 번째 SELECT는 정답이 표시됩니다.1.500000
SELECT CAST (col1 as float) / col2 FROM tbl1
한 명의 출연자가 일을 해야 합니다. ("적은 것이 더 많습니다.")
온라인 책에서:
우선 순위가 높은 인수의 데이터 형식을 반환합니다.데이터 유형 우선 순위에 대한 자세한 내용은 데이터 유형 우선 순위(Transact-SQL)를 참조하십시오.
정수 배당을 정수 지수로 나눈 경우 결과의 일부 부분이 잘린 정수가 됩니다.
CAST( ROUND(columnA *1.00 / columnB, 2) AS FLOAT)
원하는 결과를 얻을 수 있는 다른 방법이 있을 수 있습니다.
Declare @a int
Declare @b int
SET @a = 3
SET @b=2
SELECT cast((cast(@a as float)/ cast(@b as float)) as float)
분모를 십진수로 변환한 후에 분할합니다. 예를 들어
select col1 / CONVERT(decimal(4,2), col2) from tbl1
SQL에서 십진수 값은 십진수 리터럴을 지정하거나 나눗셈 연산에서 십진수 열을 사용하여 결과를 나눗셈하는 데 사용할 수 있습니다.다음은 예입니다.
"매출"이라는 테이블에 "매출"과 "비용"이라는 두 개의 열이 있다고 가정해 보겠습니다.비용 대비 수익의 비율인 이윤을 계산하려고 합니다.
SELECT Revenue / Expenses AS ProfitMargin FROM Sales;
이 예에서는 "수익" 및 "비용" 열이 모두 10진수 값이라고 가정하면 분할 작업이 자동으로 10진수 계산을 처리하고 결과를 10진수 값으로 반환합니다.
십진수 리터럴로 나누려면 쿼리에 명시적으로 지정할 수 있습니다.
SELECT Revenue / 100.0 AS Percentage FROM Sales;
여기서 우리는 "수익" 열을 10진수 문자인 100.0으로 나누고 있습니다.결과는 백분율을 나타내는 십진수 값이 됩니다.
SQL에서 나눗셈을 수행할 때 잠재적인 오류를 방지하기 위해 분모가 0이 아닌지 확인해야 합니다.
언급URL : https://stackoverflow.com/questions/4834973/decimal-values-in-sql-for-dividing-results
'programing' 카테고리의 다른 글
오라클 NUMBER(p) 스토리지 크기? (0) | 2023.07.01 |
---|---|
zshon mac에서 Git 탭 완료가 작동하지 않습니다. (0) | 2023.07.01 |
NumPy 2d 배열의 슬라이싱 또는 nxn 배열(n>m)에서 mxm 하위 매트릭스를 추출하는 방법은 무엇입니까? (0) | 2023.07.01 |
Mongo 오류:이 MongoDB 배포는 재시도 가능한 쓰기를 지원하지 않습니다.연결 문자열에 retryWrites=false를 추가하십시오. (0) | 2023.07.01 |
정확히 무엇을 잘라내나요(날짜, 'IW')? (0) | 2023.07.01 |