Мне нужно получить наибольшее значение из двух полей:
SELECT MAX(field1), MAX(field2)
Как я могу получить максимальную отдачу от этих двух?
Ответы:
Вы можете использовать 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
даже когда у тебя есть два десятка полей для сравнения!
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
GREATEST()
для самых больших аналогичноLEAST()
для самых маленьких.