2014-10-30 68 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

回答