如何在MySQL中最多两列可以为空?

时间:2009-10-23 05:14:43

标签: mysql sql sorting

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

2 个答案:

答案 0 :(得分:15)

如果您知道salaryplus将始终大于salaryminus,那么您可以

order by coalesce(salaryplus, salaryminus, 0)

coalesce将返回非空的第一个值,或者(在此示例中)0,如果两个值都为null。

否则,请执行以下操作:

order by greatest(ifnull(salaryminus,0), ifnull(salaryplus,0))

如果salaryminussalaryplus为空,则会将其视为0,并按两者中的较大者排序。

答案 1 :(得分:0)

您可以使用coalesce将可能为空的列转换为特定值 - 例如,如果salaryminus为null,coalesce(salaryminus, -99999999)将给出一个较大的负数,但如果不为null,则返回salaryminus。 / p>