以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;
答案 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);
亲切的问候,弗兰克