MAX
Синтаксис
MAX([DISTINCT] expr)
Описание
Возвращает наибольшее, или максимальное, значение expr. MAX() также может принять строковый аргумент, в этом случае возвращается максимальное строковое значение. Ключевое слово DISTINCT может быть использовано для поиска максимального значения из уникальных значений expr, однако, это даёт тот же результат, что и опускание DISTINCT.
Обратите внимание, что поля SET и ENUM в настоящее время сравниваются по их строковому значению, а не по их относительному положению в наборе, поэтому MAX() может дать другой наибольший результат, чем ORDER BY DESC.
Это агрегатная функция, и её можно использовать с клаузой GROUP BY.
MAX() можно использовать как оконную функцию.
MAX() возвращает NULL если не было совпадающих строк.
Примеры
CREATE TABLE student (name CHAR(10), test CHAR(10), score TINYINT);
INSERT INTO student VALUES
('Chun', 'SQL', 75), ('Chun', 'Tuning', 73),
('Esben', 'SQL', 43), ('Esben', 'Tuning', 31),
('Kaolin', 'SQL', 56), ('Kaolin', 'Tuning', 88),
('Tatiana', 'SQL', 87), ('Tatiana', 'Tuning', 83);
SELECT name, MAX(score) FROM student GROUP BY name;
+---------+------------+
| name | MAX(score) |
+---------+------------+
| Chun | 75 |
| Esben | 43 |
| Kaolin | 88 |
| Tatiana | 87 |
+---------+------------+
MAX для строк:
SELECT MAX(name) FROM student; +-----------+ | MAX(name) | +-----------+ | Tatiana | +-----------+
Будьте внимательны, чтобы избежать этой распространённой ошибки, не группируя правильно и получая несовпадающие данные:
SELECT name,test,MAX(SCORE) FROM student; +------+------+------------+ | name | test | MAX(SCORE) | +------+------+------------+ | Chun | SQL | 88 | +------+------+------------+
Разница между ORDER BY DESC и MAX():
CREATE TABLE student2(name CHAR(10),grade ENUM('b','c','a'));
INSERT INTO student2 VALUES('Chun','b'),('Esben','c'),('Kaolin','a');
SELECT MAX(grade) FROM student2;
+------------+
| MAX(grade) |
+------------+
| c |
+------------+
SELECT grade FROM student2 ORDER BY grade DESC LIMIT 1;
+-------+
| grade |
+-------+
| a |
+-------+
Как оконная функция:
CREATE OR REPLACE TABLE student_test (name CHAR(10), test CHAR(10), score TINYINT);
INSERT INTO student_test VALUES
('Chun', 'SQL', 75), ('Chun', 'Tuning', 73),
('Esben', 'SQL', 43), ('Esben', 'Tuning', 31),
('Kaolin', 'SQL', 56), ('Kaolin', 'Tuning', 88),
('Tatiana', 'SQL', 87);
SELECT name, test, score, MAX(score)
OVER (PARTITION BY name) AS highest_score FROM student_test;
+---------+--------+-------+---------------+
| name | test | score | highest_score |
+---------+--------+-------+---------------+
| Chun | SQL | 75 | 75 |
| Chun | Tuning | 73 | 75 |
| Esben | SQL | 43 | 43 |
| Esben | Tuning | 31 | 43 |
| Kaolin | SQL | 56 | 88 |
| Kaolin | Tuning | 88 | 88 |
| Tatiana | SQL | 87 | 87 |
+---------+--------+-------+---------------+
См. также
- AVG (среднее арифметическое)
- MIN (минимальное значение)
- SUM (сумма)
- Оптимизация MIN/MAX, используемая оптимизатором
- GREATEST() возвращает наибольшее значение из списка
© 2023 MariaDB
Licensed under the Creative Commons Attribution 3.0 Unported License and the GNU Free Documentation License.
https://mariadb.com/kb/en/max/