Мені потрібно отримати найбільше значення з двох полів:
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);ви повернете набір результатів із максимумом між полями 1 та 2 для кожного рядка.
Якщо ви вибираєте НАЙБІЛЬШУ () для кожного рядка
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;
Використання НАЙБІЛЬШОГО / НІЖЬОГО з 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
GREATEST()для найбільшого аналогічноLEAST()для найменшого.