带条件的SQL max

时间:2011-03-23 07:12:55

标签: mysql

以Mysql查询(sql脚本)格式编写以下条件的任何可能性。

val =100    
max_val= select max(id) from tbl;    
dif =max_val - val    
if ( dif > 20)    
  max_val=val+20    
else if ( dif < 20)    
  max_val=select max(id) from tbl;

2 个答案:

答案 0 :(得分:1)

简答:

SELECT GREATEST(120,max(id)) from tbl;

答案很长:

dif == 20时你想要发生什么?您使用了><,但从未使用==

让我们检查你的代码:

val =100    
max_val= select max(id) from tbl;    
dif =max_val - val

第一部分非常明显。

if ( dif > 20)    

这实际上意味着if max_val > 120

  max_val=val+20    

这归结为max_val = 120

else if ( dif < 20)    
  max_val=select max(id) from tbl;

else if甚至不需要在那里,因为max_val之前已经是max(id)。它什么都不做。

因此我们可以将您的伪代码重写为

max_val= select max(id) from tbl;    
if ( max_val > 120)    
  max_val=120    

因此max_val不能大于120,所以我们只需选择GREATEST(120,max_val) ...或

SELECT GREATEST(120,max(id)) from tbl;

答案 1 :(得分:0)

你的其他if - branch没有多大意义 - 你只是再次为max_val分配相同的值。

对于第一部分,您可以使用case语句(我在Oracle中对此进行了测试,但根据MySQL文档,这也适用于MySQL):

select maximum, difference, offset1, maximum + offset1 my_val from (
   select maximum, difference, 
   (case 
     when difference > 20 then 20
     else 0
    end  ) offset1 from (
     select max(id) maximum, max(id) - 100 difference from tbl) v1);

亲切的问候,弗兰克