2010-04-11 3 views
54

мне нужно получить наибольшее значение из двух полей:Biggest значение из двух или более полей

SELECT MAX(field1), MAX(field2) 

Теперь, как я могу получить наибольшее значение из этих двух?

+3

'GREATEST()' для самого большого аналогично 'LEAST()' для наименьшего. –

ответ

116

Вы можете использовать GREATEST() функцию:

SELECT GREATEST(field1, field2); 

Если вы хотите, чтобы получить абсолютный максимум из всех строк, то вы можете использовать следующие:

SELECT GREATEST(MAX(field1), MAX(field2)); 

Пример 1:

SELECT GREATEST(1, 2); 
+----------------+ 
| GREATEST(1, 2) | 
+----------------+ 
|    2 | 
+----------------+ 
1 row in set (0.00 sec) 

Пример 2:

CREATE TABLE a (a int, b int); 

INSERT INTO a VALUES (1, 1); 
INSERT INTO a VALUES (2, 1); 
INSERT INTO a VALUES (3, 1); 
INSERT INTO a VALUES (1, 2); 
INSERT INTO a VALUES (1, 4); 

SELECT GREATEST(MAX(a), MAX(b)) FROM a; 
+--------------------------+ 
| GREATEST(MAX(a), MAX(b)) | 
+--------------------------+ 
|      4 | 
+--------------------------+ 
1 row in set (0.02 sec) 
+0

не знаю почему, но работает только 'БОЛЬШЕЕ (MAX (поле1), MAX (поле2))'. Повторяется неверный номер (не самый большой) – Qiao

+1

@Qiao: Вам понадобится 'SELECT GREATEST (MAX (field1), MAX (field2));' для получения абсолютного максимума из всех строк. Если вы используете 'SELECT GREATEST (field1, field2);' вы получите результат с максимальным значением между полем1 и полем2 для каждой строки. –

+0

Вот что я искал, я был уверен, что для этого есть функция, но у меня не было понятия об этом, теперь это имеет смысл :) –

1
SELECT max(CASE 
       WHEN field1 > field2 THEN field1 
       ELSE field2 
      END) as biggestvalue 
FROM YourTable; 
6
mysql> SELECT GREATEST(2,0); 
     -> 2 

Итак, попробуйте:

mysql> SELECT GREATEST(MAX(field1), MAX(field2)); 
21

В случае, если вы выбирая БОЛЬШОЕ() для каждой строки

SELECT GREATEST(field1, field2) 

Она возвращает NULL если одно из полей - NULL. Вы можете использовать IFNULL для решения этой проблемы

SELECT GREATEST(IFNULL(field1, 0), IFNULL(field2, 0)) 
Смежные вопросы