摘要:在本教程中,您将学习如何使用 MySQL MAX()
函数来获取一组值中的最大值。
MySQL MAX()
函数简介
MySQL MAX()
函数返回一组值中的最大值。 MAX()
函数在许多情况下都很有用,例如查找最大数量、最昂贵的产品以及客户的最大付款。
以下是MAX()
函数的基本语法:
MAX(DISTINCT expression)
Code language: SQL (Structured Query Language) (sql)
如果添加DISTINCT
运算符, MAX()
函数将返回不同值的最大值,该值与所有值的最大值相同。这意味着DISTINCT
对MAX()
函数没有任何影响。
请注意, DISTINCT
对其他聚合函数(例如COUNT()
、 SUM()
和AVG()
有影响。
MySQL MAX()
函数示例
我们将使用示例数据库中的payments
表来演示MAX()
函数。
A) 使用 MySQL MAX()
函数查找列中的最大值示例
此示例使用MAX()
函数返回所有付款中的最大金额:
SELECT MAX(amount)
FROM payments;
Code language: SQL (Structured Query Language) (sql)
在此示例中, MAX()
函数检查付款表金额列中的所有值以查找最大金额。
B) 将 MySQL MAX()
函数与WHERE
子句一起使用
此语句使用MAX()
函数查找 2004 年最大的付款:
SELECT
MAX(amount) largest_payment_2004
FROM
payments
WHERE
YEAR(paymentDate) = 2004;
Code language: SQL (Structured Query Language) (sql)
在这个例子中:
该图显示了输出:
C) 在子查询中使用 MySQL MAX()
函数示例
要不仅获取最大付款金额,还要获取其他付款信息(例如客户编号、支票编号和付款日期),可以在子查询中使用MAX()
函数,如以下查询所示:
SELECT
*
FROM
payments
WHERE
amount = (SELECT
MAX(amount)
FROM
payments);
Code language: SQL (Structured Query Language) (sql)
怎么运行的。
- 子查询返回所有付款中最大的金额。
- 外部查询获取金额等于子查询返回的最大金额的付款以及其他付款的信息。
另一种不使用MAX()
函数的方法是使用ORDER BY
子句对结果集按降序排序,并使用LIMIT
子句获取结果集中的第一行,如下所示:
SELECT
*
FROM
payments
ORDER BY amount DESC
LIMIT 1;
Code language: SQL (Structured Query Language) (sql)
如果amount
列上没有索引,则带有LIMIT
子句的第二个查询会更快,因为它会检查payments
表中的所有行,而第一个查询会检查payments
表中的所有行两次,第一次是在子查询和外部查询中的另一个。
但是,如果对amount
列建立索引,第一个查询的执行速度会更快。
D) 使用 MySQL MAX()
和GROUP BY
子句示例
要查找每个组的最大值,请使用带有GROUP BY
子句的MAX
函数。
该语句使用MAX()
来获取每个客户的最大付款:
SELECT
customerNumber, MAX(amount)
FROM
payments
GROUP BY customerNumber
ORDER BY MAX(amount);
Code language: SQL (Structured Query Language) (sql)
在这个例子中:
- 首先,
GROUP BY
子句按客户编号将付款分组。 - 其次,
MAX()
函数返回每组中最大的付款。
E) 将 MySQL MAX()
与HAVING
子句一起使用
当您将MAX()
函数与GROUP BY
子句一起使用时,您可以找到每个组的最大值。
如果要根据条件过滤组,可以在HAVING
子句中使用MAX()
函数。
以下查询查找每个客户的最大付款额;并根据退回的付款,仅获取金额大于80,000
的付款。
SELECT
customerNumber, MAX(amount)
FROM
payments
GROUP BY customerNumber
HAVING MAX(amount) > 80000
ORDER BY MAX(amount);
Code language: SQL (Structured Query Language) (sql)
如果您想查看客户姓名而不是号码,可以将payments
表与customers
表连接起来:
SELECT
customerName,
MAX(amount)
FROM
payments
INNER JOIN customers USING (customerNumber)
GROUP BY
customerNumber
HAVING
MAX(amount) > 80000
ORDER BY
MAX(amount);
Code language: SQL (Structured Query Language) (sql)
这是输出:
在本教程中,您学习了如何使用 MySQL MAX()
函数查找一组值中的最大值。