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

Mas*_*ask 9 mysql sql sorting

create table jobs(
    id INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
        .....
        salaryminus INTEGER UNSIGNED DEFAULT NULL,
        salaryplus INTEGER UNSIGNED DEFAULT NULL,
        .....
);
Run Code Online (Sandbox Code Playgroud)

我想做的事情如下:

Select * from jobs order by maxof(salaryminus, salaryplus) limit 10;
Run Code Online (Sandbox Code Playgroud)

maxof(Null,1000) 应该是1000,

如何实施maxof

Ian*_*and 16

如果你知道salaryplus永远大于salaryminus,那么你就可以做到

order by coalesce(salaryplus, salaryminus, 0)
Run Code Online (Sandbox Code Playgroud)

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

否则,做这样的事情:

order by greatest(ifnull(salaryminus,0), ifnull(salaryplus,0))
Run Code Online (Sandbox Code Playgroud)

如果它们为空,这将同时处理为0 salaryminussalaryplus0,并且将按两者中的较大者排序.

  • 它不在标准中,而是由MySQL,PostgreSQL和Oracle提供.它在SQLite中拼写为"MAX`".如果你必须使用SQL Server,或者需要为家庭作业问题编写标准SQL,请使用"`ORDER BY CASE WHERE salaryminus> salaryplus THEN salaryminus ELSE salaryplus END`" (2认同)