2009-10-23 12 views
7
create table jobs(
    id INTEGER UNSIGNED NOT NULL AUTO_INCREMENT, 
     ..... 
     salaryminus INTEGER UNSIGNED DEFAULT NULL, 
     salaryplus INTEGER UNSIGNED DEFAULT NULL, 
     ..... 
); 

我想要做的事,如:如何通過最多兩列在MySQL中可以爲null?

Select * from jobs order by maxof(salaryminus, salaryplus) limit 10; 

maxof(Null,1000)應該是1000,

如何實施maxof

回答

12

如果你知道salaryplus將始終大於salaryminus,那麼你可以做

order by coalesce(salaryplus, salaryminus, 0) 

​​3210將返回第一個值不爲空,或者(在這個例子中)0,如果價值觀空值。

否則,做這樣的事情:

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

這將把雙方salaryminussalaryplus,就好像它們是空的0,並將由兩個更大的訂單。

+1

請注意'GREATEST'不是標準的SQL。 – Charles 2013-06-23 04:43:44

+1

它不在標準中,而是由MySQL,PostgreSQL和Oracle提供。它在SQLite中拼寫爲「MAX」。如果您必須使用SQL Server,或者需要爲作業問題編寫標準SQL,請使用「'ORDER BY CASE WHERE salaryminus> salaryplus THEN salaryminus ELSE salaryplus END'」 – 2013-06-25 02:27:39

0

您可以使用coalesce將可能爲null的列轉變爲特定值 - 例如,如果salaryminus爲null,則coalesce(salaryminus, -99999999)將給出一個很大的負數,但如果不爲null,則會返回salaryminus。