2014-10-30 71 views
0

我想從一組字段中獲得最大值,但其中一些可以爲NULL,因此我無法像原樣那樣使用GREATEST,並且必須將NULL值轉換爲任意值( -1在這種情況下)。但是在結果中,如果所有字段都是NULL,我仍然必須獲得NULL值。使用CASE條件作爲結果值

SELECT 
CASE WHEN GREATEST(IFNULL(f1, -1), IFNULL(f2, -1)) = -1 THEN 
    NULL 
ELSE 
    GREATEST(IFNULL(f1, -1), IFNULL(f2, -1)) 
END 

我的問題是,我有兩次最大價值的計算,所以我想知道是否有一種方法可以「儲存」的值,使MySQL沒有評估的兩倍。

或者如果有更好/更正確的方法來做我想做的事。

謝謝。

+1

我認爲MySQL能夠告訴你計算兩次同樣的事情,它在內部存儲它。 – Barmar 2014-10-30 08:44:53

+0

@Barmar:我會非常驚訝,如果是這樣的情況下,特別是要記住有沒有類似於'DECERMENISTIC'在oracle – zerkms 2014-10-30 08:47:13

+0

@zerkms請參閱http://stackoverflow.com/questions/23824505/does- mysql-elimination-common-subexpressions-between-select-and-having-group-by-cl – Barmar 2014-10-30 08:48:08

回答