2009-10-23 11 views
7
ben böyle bir şey yapmak istiyorum

MySQL'de null olabilen en fazla iki sütuna göre nasıl sipariş verilir?

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 olmalı,

Nasıl maxof uygulamak?

cevap

12

Eğer salaryplus daima daha büyük salaryminus olacağını biliyorum, o zaman yapabilirsiniz

order by coalesce(salaryplus, salaryminus, 0) 

coalesce iki değer de ise, (bu örnekte) 0 boş değil, ya da ilk değeri döndürecektir boş.

Aksi takdirde, böyle bir şey yapmak:

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

Bu 0'a onlar boş olup olmadığını hem salaryminus ve salaryplus tedavi edecek ve iki büyük tarafından sipariş olacaktır.

+1

'GREATEST'in standart SQL olmadığını unutmayın. – Charles

+1

Standartta değil, MySQL, PostgreSQL ve Oracle tarafından sağlanmıştır. SQLite'de "MAX" yazıyor. SQL Server kullanmanız gerekiyorsa veya bir ev ödevi sorusu için standart SQL yazmanız gerekiyorsa, "' DAHA FAZLA BİLGİ salaryminus> salaryplus SONRA salaryminus ELSE salaryplus END "ifadesini kullanın. –

0

Muhtemelen boş sütunları belirli değerlere döndürmek için coalesce'u kullanabilirsiniz; örneğin, salaryminus boşsa coalesce(salaryminus, -99999999) büyük bir negatif sayı verir, ancak boş değilse maaşın değerini döndürür.

İlgili konular