2015-11-01 90 views
-1

如果我是有一些MySQL的,如:夫婦有用的MySQL SUM問題

 $stmt = $conn->prepare("SELECT SUM(`num1`) + SUM(`num2`) FROM database.table WHERE `id` = :id"); 
     $stmt->bindParam(':id', $ident, PDO::PARAM_INT, 11); 
     $stmt->execute(); 
     $sum2 = $stmt->fetchAll(); 

讓我們假設的num1各自的值是20,num2是空的,我應該會收到一個$ SUM2 [0] [0]的值是20還是爲null?

而且使用SUM時,應準備的選擇是作爲顯示或:

 $stmt = $conn->prepare("SELECT SUM(`num1` + `num2`) FROM database.table WHERE `id` = :id"); 

抑或是不是特別重要?

+0

如果任何值爲NULL,則結果爲NULL。在控制檯或Phpmyadmin中用'select 1 + null'或任何其他數學運算來嘗試。如果您在Mysql上使用SUM,則還需要使用GROUP BY。 –

+0

當你開始輸入*幾個問題*時,請記住這是一個**問題和答案**網站。請注意,**問題**或**答案**都不是複數。 –

+0

我相信有兩個問題,結果可能與最終結果有關。一種是使用SUM並添加NULL值,另一種定義準備好的語句結構是否會以任何方式改變它。如果不是這樣,對於混淆抱歉,但它仍然看起來像兩個相關的問題給我自己... – Cassandra

回答

1

使用MySQL if因爲SUM(any) + NULL = NULL

IF(num1 IS NULL,0,num1) 
IF(num2 IS NULL,0,num2) 

,或者使用類似: -

SELECT IFNULL(SUM(num1), 0) 

或使用IFNULL

IFNULL(SUM(num1), 0) 

或使用COALESCE

COALESCE(SUM(num1), 0) 
+0

太棒了!現在測試.....! – Cassandra

+0

成功,非常感謝!廣泛的答案選項也幫助了很多人。 :) – Cassandra

+0

這是我的榮幸:) @Cassandra –

1

sum()忽略NULL值。因此,當全部的值爲NULL時,它僅返回NULL

另一方面,當您添加兩個數字時,則結果爲NULL,如果其中任一個爲NLLL

因此,在第一個查詢中,如果您只有一行,則結果爲NULL,因爲sum(num2)NULL,並且添加結果爲NULL

在第二種情況 - 一行 - 那麼值也將是NULL。但是,對於多行,它最終會忽略行中任一列的值爲NULL

+0

好的,無論我做什麼關於我準備好的選擇,並假設id只會查看一行的結果,如果兩個值中的任何一個爲NULL,那麼我的結果將爲NULL。有沒有辦法,我可以得到一個NULL結果行爲像一個0結果,以便(在我的例子中)20 + NULL會像20 + 0和20等於? – Cassandra