create table jobs(
id INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
.....
salaryminus INTEGER UNSIGNED DEFAULT NULL,
salaryplus INTEGER UNSIGNED DEFAULT NULL,
.....
);
我想做类似的事情:
Select * from jobs order by maxof(salaryminus, salaryplus) limit 10;
maxof(Null,1000)
应为1000,
如何实施maxof
?
答案 0 :(得分:15)
如果您知道salaryplus
将始终大于salaryminus
,那么您可以
order by coalesce(salaryplus, salaryminus, 0)
coalesce
将返回非空的第一个值,或者(在此示例中)0,如果两个值都为null。
否则,请执行以下操作:
order by greatest(ifnull(salaryminus,0), ifnull(salaryplus,0))
如果salaryminus
和salaryplus
为空,则会将其视为0,并按两者中的较大者排序。
答案 1 :(得分:0)
您可以使用coalesce将可能为空的列转换为特定值 - 例如,如果salaryminus为null,coalesce(salaryminus, -99999999)
将给出一个较大的负数,但如果不为null,则返回salaryminus。 / p>