2012-10-29 66 views
2

我有兩個十進制值的表,使用下面的語句,我可以將它們全部添加並獲得總和。IFNULL可以與select語句一起使用嗎?

SELECT(
(SELECT SUM(total) from recruitment where quote_id = 1) 
+ 
(SELECT SUM(cost) from cost WHERE quote_id = 1) 
)AS total 

但是,如果任一選擇reurns null,則總爲空,所以我嘗試使用ISNULL返回一個0,而不是空這樣的:

SELECT(
(IFNULL(SELECT SUM(total) FROM recruitment WHERE quote_id = 1),0) 
+ 
(IFNULL(SELECT SUM(cost) FROM cost WHERE quote_id = 1),0) 
)AS total 

這沒有工作,所以我很只是想知道如何去做這個最好的方法?

+0

處理NULL然後將NULL轉換爲0不是更好嗎? –

回答

2

使用COALESCE()它返回其第一個非空參數,並可以用零替換整個表達式。

SELECT(
    COALESCE((SELECT SUM(total) FROM recruitment WHERE quote_id = 1),0) 
    + 
    COALESCE((SELECT SUM(cost) FROM cost WHERE quote_id = 1),0) 
)AS total 

IFNULL()工作應該以同樣的方式在這種情況下 - 我懷疑你可能已經造成一個語法錯誤不正確的括號。

/* Should work too. Make sure the inner SELECT is enclosed in() */ 
SELECT(
    IFNULL((SELECT SUM(total) FROM recruitment WHERE quote_id = 1),0) 
    + 
    IFNULL((SELECT SUM(cost) FROM cost WHERE quote_id = 1),0) 
)AS total 
+0

對不起 - parens是不可靠的 - 現在修復... –

+0

非常感謝他們都工作,IFNULL和COALESCE之間有什麼區別嗎? –

+0

@bdjohnson'IFNULL()'只能比較一件事情,如果該事件爲空,則返回第二個參數。 'COALESCE()'另一方面可以包含多個參數,並且返回非空的第一個參數。例如:'COALESCE(NULL,NULL,NULL,'NOT NULL!')'這樣你就可以在其中放置多個列。而且,它在不同的RDBMS中更具可移植性。 –

1

在總結之前使用COALESCE

SELECT ((SELECT SUM(COALESCE(total,0)) FROM recruitment WHERE quote_id = 1) + 
     (SELECT SUM(COALESCE(cost,0)) FROM cost WHERE quote_id = 1)) AS TOtal 
3

嘗試使用

SELECT(
(SELECT IFNULL((SELECT SUM(total) FROM recruitment WHERE quote_id=1),0)) 
+ 
(SELECT IFNULL((SELECT SUM(cost) FROM cost WHERE quote_id=1), 0)) 
)AS total 

IFNULLSELECT語句中使用類似

SELECT IFNULL(expr0,expr1); 

具有施工,並將於情況下返回expr1expr0NULL

相關問題