2011-11-27 2 views
27

나는 R2SQL 서버 2008을 사용하고 있는데 데이터가 절대 삽입하지 최대 INT 능가 INT 열이,하지만 난 실행될 때이 최대 INT 한계를 능가하고 설명한 오류를 던지는 SUM 기능을 사용하는 쿼리가 제목에.INT 열에서 SUM을 사용할 때 산술 오버플로 오류를 방지하는 방법은 무엇입니까?

열 유형을 INT에서 BIGINT으로 변경하지 않고도이 쿼리를 실행할 수 있기를 원합니다.

SELECT UserId, 
      SUM(PokemonExp)  AS TotalExp, 
      MAX(PokemonLevel) AS MaxPokeLevel 

FROM  mytable 

GROUP BY UserId 
ORDER BY TotalExp DESC 

참고 :PokemonExp 열 유형 INT이다

여기 내 쿼리입니다.

답변

54

SUM의 표현 유형이 반환 유형을 결정합니다.

는 다음과 같은 시도 :

SELECT UserId, 
      SUM(CAST(PokemonExp AS BIGINT)) AS TotalExp, 
      MAX(PokemonLevel)     AS MaxPokeLevel 

FROM  mytable 

GROUP BY UserId 
ORDER BY TotalExp DESC 
+0

정답은 당신에게 그것을 가치가 무엇인지에 대한 – MonsterMMORPG

+0

대단히 감사합니다, 동일 AVG 일어날 것, 그것은 범람의 당신의 가치의 단지 합계의 경우에도 마찬가지입니다. –

1

당신은 적절한 금액을 얻을 수 BIGINT에 열 유형을 변경할 필요가 없습니다.

그냥 CAST 또는 CONVERTPokemonExp 전에 BIGINT에 당신은 SUM이 좋아하는 다음과 수행 SUM에서 표현의

SUM(CAST(PokemonExp AS BIGINT)) 
0

허용 유형은 반환 유형을 결정합니다.

는 다음을 시도해보십시오

SELECT UserId, 
      SUM(CAST(PokemonExp AS BIGINT)) AS TotalExp, 
      MAX(PokemonLevel)     AS MaxPokeLevel 

FROM  mytable 

GROUP BY UserId 
ORDER BY TotalExp DESC 
+0

'CAST (PokemonExp AS BIGINT)'는 결과를 OP가 원하는 것과 반대 인'BIGINT '로 명시 적으로 캐스트하지 않습니까? – SuperBiasedMan