programing

결과를 나누기 위한 SQL의 십진수 값

lastmoon 2023. 7. 1. 09:17
반응형

결과를 나누기 위한 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

반응형