Как заказать максимум два столбца, который может быть нулевым в MySQL? - PullRequest
9 голосов
/ 23 октября 2009
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 ]

15 голосов
/ 23 октября 2009

Если вы знаете, что salaryplus всегда будет больше salaryminus, тогда вы можете сделать

order by coalesce(salaryplus, salaryminus, 0)

coalesce вернет первое значение, которое не равно нулю, или (в этом примере) 0, если оба значения равны нулю.

В противном случае сделайте что-то вроде этого:

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

Это обработает salaryminus и salaryplus как 0, если они равны нулю, и упорядочит по большему из двух.

0 голосов
/ 23 октября 2009

Вы можете использовать coalesce , чтобы вместо этого превратить столбцы с возможными нулями в конкретные значения - например, coalesce(salaryminus, -99999999) даст большое отрицательное число, если salaryminus равно нулю, но вернет salaryminus, если не равно нулю.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...