2016-06-17 60 views
0

想知道,MySQL將如何處理這個查詢,如果sum(credits)!= NULL或者MySQL是否爲這些查詢進行了優化,sum()會計算兩次。MySQL - 如果條件優化

select if(sum(credits)=NULL, 0, sum(credits)) from ...... 

感謝

+0

'sum'只發生一次而不是兩次 – ughai

回答

0

如果將無法正常工作。第一個條件總是錯誤的。與NULL進行比較的正確方法是IS NULL,而不是=

只需使用該構建體:

select coalesce(sum(credits), 0) 
+0

謝謝,我對語法進行了更正,但如果使用IS NULL會發生什麼情況,它會計算兩次嗎? – yumoji

+0

@Yusuf。 。 。這取決於數據庫,但可能是MySQL的。然而,sum()的計算與通常的聚合工作相比是微不足道的(這一點不再重複)。所以額外的工作應該是微不足道的(對於'count(distinct)'''這樣的「更難」功能可能更重要)。 –

0

使用IF

SELECT IF(sum(credits) IS NULL, 0 ,sum(credits)) ..... 

IF(表達式1,表達式2,表達式3)

如果expr1 TRUE(表達式1 <> 0且expr1的<> NULL),那麼IF()返回expr2;否則它返回expr3。 IF()返回一個數字或字符串值,這取決於在其中使用它

使用上下文IFNULL

SELECT IFNULL(sum(credits), 0) ..... 

使用COALESCE

SELECT COALESCE(sum(credits), 0) ..... 

參見:MySQL Control Flow Functions

0

這是我們不應該擔心的事情。使用SQL,我們告訴DBMS要做什麼,而不是如何去做。

DBMS很可能只會計算sum(credits)一次。如果不是,那看起來很愚蠢。但是,這不是由SQL標準決定的,因此DBMS程序員可以自由選擇如何對其進行編碼。他們可能寫入DBMS,以便sum(credits)計算兩次。我們無法知道他們是否做到了,但如前所述,這不太可能,我們也不應該擔心。