Если вы хотите получить абсолютный максимум из всех строк, вы можете использовать следующее:
SELECTGREATEST(MAX(field1), MAX(field2));
Пример 1:
SELECTGREATEST(1, 2);
+----------------+
| GREATEST(1, 2) |
+----------------+
| 2 |
+----------------+
1 row in set (0.00 sec)
Пример 2:
CREATETABLE a (a int, b int);
INSERTINTO a VALUES (1, 1);
INSERTINTO a VALUES (2, 1);
INSERTINTO a VALUES (3, 1);
INSERTINTO a VALUES (1, 2);
INSERTINTO a VALUES (1, 4);
SELECTGREATEST(MAX(a), MAX(b)) FROM a;
+--------------------------+
| GREATEST(MAX(a), MAX(b)) |
+--------------------------+
| 4 |
+--------------------------+
1 row in set (0.02 sec)
не знаю почему, но только GREATEST(MAX(field1), MAX(field2))работает. Возвращается другой неправильный номер (не самый большой)
Цяо
1
@Qiao: Да, вам нужно SELECT GREATEST(MAX(field1), MAX(field2));получить абсолютный максимум из всех строк. Если вы используете, SELECT GREATEST(field1, field2);вы получите набор результатов с максимумом между field1 и field2 для каждой строки.
Даниэль Вассалло
Это то, что я искал, я был уверен, что для этого есть функция, но я понятия не имел о названии, теперь оно имеет смысл :)
Эмиль Боркони
40
Если вы выбираете НАИЛУЧШИЙ () для каждой строки
SELECTGREATEST(field1, field2)
Он вернет NULL, если одно из полей NULL. Вы можете использовать IFNULL для решения этой проблемы
Это решение невозможно, когда у меня есть сотни столбцов.
Deepak
1
@Deepak, хорошо, но ответ более 10 лет назад, когда я не знал о вызове функции "НАИБОЛЬШИЙ" или "НАИМЕНЬШИЙ", но в исходном сообщении спрашивалось о 2 столбцах, и если у вас есть таблица с сотнями столбцов в в аналогичном контексте, то вам необходимо пересмотреть серьезную проблему проектирования базы данных.
DRapp
Да, верно, спасибо за разъяснения. Теперь ваш комментарий поможет другим понять, что и когда использовать.
Deepak
0
Использование GREATEST / LEAST с MIN / MAX
НАИБОЛЕЕ / НАИМЕНЕЕ : используется со столбцами, когда вы хотите найти максимальное или минимальное значение из различных столбцов.
МИН МАКС : используется со строками, когда вы хотите найти максимальное или минимальное значение из различных строк:
Примерная таблица:
SELECTGREATEST(col_a, col_b, col_c) FROM temp;
SELECTMIN(GREATEST(col_a, col_b, col_c)) FROM temp; # 3 as outputSELECTMAX(GREATEST(col_a, col_b, col_c)) FROM temp; # 9 as outputSELECTLEAST(col_a, col_b, col_c) FROM temp;
SELECTMIN(LEAST(col_a, col_b, col_c)) FROM temp; # 1 as outputSELECTMAX(LEAST(col_a, col_b, col_c)) FROM temp; # 7 as output
GREATEST()
для самых больших аналогичноLEAST()
для самых маленьких.Ответы:
Вы можете использовать
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)
источник
GREATEST(MAX(field1), MAX(field2))
работает. Возвращается другой неправильный номер (не самый большой)SELECT GREATEST(MAX(field1), MAX(field2));
получить абсолютный максимум из всех строк. Если вы используете,SELECT GREATEST(field1, field2);
вы получите набор результатов с максимумом между field1 и field2 для каждой строки.Если вы выбираете НАИЛУЧШИЙ () для каждой строки
SELECT GREATEST(field1, field2)
Он вернет NULL, если одно из полей NULL. Вы можете использовать IFNULL для решения этой проблемы
SELECT GREATEST(IFNULL(field1, 0), IFNULL(field2, 0))
источник
IFNULL
даже когда у тебя есть два десятка полей для сравнения!mysql> SELECT GREATEST(2,0); -> 2
Поэтому постарайтесь:
mysql> SELECT GREATEST(MAX(field1), MAX(field2));
источник
SELECT max( CASE WHEN field1 > field2 THEN field1 ELSE field2 END ) as biggestvalue FROM YourTable;
источник
Использование GREATEST / LEAST с MIN / MAX
НАИБОЛЕЕ / НАИМЕНЕЕ : используется со столбцами, когда вы хотите найти максимальное или минимальное значение из различных столбцов.
МИН МАКС : используется со строками, когда вы хотите найти максимальное или минимальное значение из различных строк:
Примерная таблица:
SELECT GREATEST(col_a, col_b, col_c) FROM temp;
SELECT MIN(GREATEST(col_a, col_b, col_c)) FROM temp; # 3 as output SELECT MAX(GREATEST(col_a, col_b, col_c)) FROM temp; # 9 as output SELECT LEAST(col_a, col_b, col_c) FROM temp;
SELECT MIN(LEAST(col_a, col_b, col_c)) FROM temp; # 1 as output SELECT MAX(LEAST(col_a, col_b, col_c)) FROM temp; # 7 as output
источник