2009-07-29 29 views
36

Tôi có một bảng có cột số nguyên với một số số khá lớn trong đó. Tôi cố gắng tính trung bình một số giá trị trong điều này và đôi khi nó hoạt động vào những thời điểm khác nó cho lỗi nàyMáy chủ SQL cung cấp tràn số học khi tính toán avg

"Biểu thức chuyển đổi lỗi tràn số học thành int kiểu dữ liệu".

Tôi đã phá vỡ nó xuống và mẫu này tạo ra các lỗi

create table LargeNumbers (number int) 
insert into LargeNumbers values (100000000) -- X 30 
select avg(number) from LargeNumbers 

Có ai biết làm thế nào tôi có thể có được điều này để tính toán mức trung bình?

Trả lời

55

SQL nội bộ tổng hợp các giá trị (chia cho số sau) và lưu trữ chúng trong kiểu dữ liệu cột - trong trường hợp này là int - không đủ lớn để giữ tổng - nếu bạn truyền giá trị như là một bigint đầu tiên nó sẽ tổng hợp các giá trị cũng lưu trữ các giá trị đó trong một bigint - mà có lẽ là đủ lớn, sau đó tính toán trung bình có thể tiến hành.

select avg(cast(number as bigint)) from LargeNumbers 
5

Bạn sẽ cần phải truyền số lượng lớn hơn một int, nói lớn hơn, vì để tính toán SQL trung bình tổng hợp tất cả các giá trị dưới dạng int, và đây là nơi bạn đang tràn.

+0

Tôi không thể thay đổi bảng strucutre dễ dàng - do đó, im đi với câu trả lời thực hiện điều này trong khi truy vấn – user129211

Các vấn đề liên quan