2013-06-11 68 views

Trả lời

52

Hãy thử điều này:

select COALESCE(sum(balance),0) from mytable where customer = 'john' 

này nên làm việc. Phương thức kết hợp phải trả về 0.

+3

COALESCE tốt hơn rất nhiều ở đây thì isnull –

+0

@ScottSelby: Làm thế nào? AFAIK, 'isnull' dễ dự đoán hơn ở chỗ nó luôn trả về kiểu dữ liệu của đối số đầu tiên. – Andomar

+0

@Andomar "Một biểu thức liên quan đến ISNULL với tham số không null được coi là NOT NULL, trong khi các biểu thức liên quan đến COALESCE với các tham số không null được coi là NULL" - Tôi luôn sử dụng COALESCE, nó sẽ luôn luôn bắt null số dư không được vô hiệu –

8

Đó không phải là vấn đề. Nếu không có hàng, sum() sẽ trả lại null. Nó cũng sẽ trả lại null nếu tất cả các hàng có số dư null.

Để trở về zero thay vào đó, hãy thử:

select isnull(sum(balance),0) from mytable where customer = 'john' 
+0

nó cũng sẽ trở lại 'null' nếu một trong những hàng có một' cân bằng null' – pcv

+0

Đây chính là điều tôi cần phải biết, tức là nếu 'null' được trả về bởi' sum' trong các trường hợp khi số lượng bản ghi là 0. +1 cho lý do của hành vi. –

1
select coalesce(sum(coalesce(balance,0)),0) from mytable where customer = 'john' 
+0

Đó sẽ là một sửa chữa nếu OP sử dụng Oracle, và nếu có một bản ghi với một số dư 'null', trái với không có hồ sơ – Andomar

+0

Xin lỗi, đã không nhận thấy rằng ông sử dụng SQL Server. Tôi sẽ chỉnh sửa nó để tương thích với hầu hết các triển khai. –

+0

Tôi cần phải đặt COALESCE wrapper quanh SUM nếu không có bản ghi và trên MySQL. –

1

Hãy thử điều này:

select sum(IsNull(balance,0)) from mytable where customer = 'john' 
+0

Đó có thể là bản sửa lỗi nếu có bản ghi có số dư không, thay vì không có bản ghi – Andomar

+0

'nếu khách hàng không có số dư' không rõ là không có bản ghi HOẶC có bản ghi nhưng số dư là NULL –

1

Có thể bạn đang nghĩ đến hành vi của COUNT?

COUNT(Field) sẽ trả lại 0 nhưng SUM(Field) trả về NULL nếu không có hàng phù hợp.

Bạn cần một ISNULL hoặc COALESCE

COALESCE hoặc ISNULL

+0

lý do tại sao được xếp hạng? – bendataclear

+0

COUNT trả về giá trị khác 0 - có nghĩa là không có hàng nào phù hợp với truy vấn, nếu có 2 hàng đếm sẽ trả về 2, không phải tổng của 2 hàng –

+0

@ScottSelby, xin lỗi có thể tôi không rõ ràng, ý tôi là đã suy nghĩ về 'COUNT' khi trở về 0 nếu không có hàng phù hợp, không phải là' COUNT' là một thay thế cho 'SUM'. – bendataclear

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