Найбільше значення з двох або більше полів


83

Мені потрібно отримати найбільше значення з двох полів:

SELECT MAX(field1), MAX(field2)

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


7
GREATEST()для найбільшого аналогічно LEAST()для найменшого.
James Oravec

Відповіді:


168

Можливо, ви захочете скористатися 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))працює. Повертається інший неправильний номер (не найбільший)
Цяо,

1
@Qiao: Так, вам потрібно було б SELECT GREATEST(MAX(field1), MAX(field2));отримати абсолютний максимум з усіх рядків. Якщо ви використовуєте, SELECT GREATEST(field1, field2);ви повернете набір результатів із максимумом між полями 1 та 2 для кожного рядка.
Даніель Вассалло,

Це те, що я шукав, я був упевнений, що для цього є функція, але я не мав поняття про назву, зараз це цілком логічно :)
Еміль Борконі

39

Якщо ви вибираєте НАЙБІЛЬШУ () для кожного рядка

SELECT GREATEST(field1, field2)

Він поверне NULL, якщо одне з полів NULL. Ви можете використовувати IFNULL для вирішення цієї проблеми

SELECT GREATEST(IFNULL(field1, 0), IFNULL(field2, 0))

Так, сумно, ти повинен робити усі ці дії IFNULL, навіть коли у тебе є два десятки полів для порівняння!
Іфеді Оконкво,

6
mysql> SELECT GREATEST(2,0);
        -> 2

Отже, спробуйте:

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

1
SELECT max( CASE
                WHEN field1 > field2 THEN field1
                ELSE field2
            END ) as biggestvalue 
FROM YourTable;

Це рішення неможливе, коли у мене сто сотень стовпців.
Діпак

1
@Deepak, добре, але відповідь понад 10 років тому, коли я не знав про виклик функції "НАЙКРАЩИЙ" або "НАЙМІНЬШИЙ", але в оригінальному допиті було запитання про 2 стовпці, і якщо у вас є таблиця із сотнею стовпців у подібному контексті, тоді у вас є серйозна проблема з розробкою бази даних, яку слід переглянути.
DRapp

Так, дякую за роз'яснення. Тепер ваш коментар допоможе іншим, що коли використовувати.
Діпак

0

Використання НАЙБІЛЬШОГО / НІЖЬОГО з MIN / MAX

НАЙБІЛЬШИЙ / МЕНШИЙ : використовується зі стовпцями, коли ви хочете знайти максимальне або мінімальне значення з різних стовпців.

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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.