MySQL MAX

摘要:在本教程中,您将学习如何使用 MySQL MAX()函数来获取一组值中的最大值。

MySQL MAX()函数简介

MySQL MAX()函数返回一组值中的最大值。 MAX()函数在许多情况下都很有用,例如查找最大数量、最昂贵的产品以及客户的最大付款。

以下是MAX()函数的基本语法:

MAX(DISTINCT expression)Code language: SQL (Structured Query Language) (sql)

如果添加DISTINCT运算符, MAX()函数将返回不同值的最大值,该值与所有值的最大值相同。这意味着DISTINCTMAX()函数没有任何影响。

请注意, DISTINCT对其他聚合函数(例如COUNT()SUM()AVG()有影响。

MySQL MAX()函数示例

我们将使用示例数据库中的payments表来演示MAX()函数。

A) 使用 MySQL MAX()函数查找列中的最大值示例

此示例使用MAX()函数返回所有付款中的最大金额:

SELECT MAX(amount)
FROM payments;Code language: SQL (Structured Query Language) (sql)

试试看

MySQL MAX 函数示例

在此示例中, 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)

在这个例子中:

  • 首先,在WHERE子句中使用条件仅获取年份为 2004 年的付款。我们使用YEAR()函数从付款日期提取年份。
  • 然后,使用SELECT子句中的MAX()函数查找 2004 年的最大付款额。

该图显示了输出:

mysql max 与 where 子句

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)

试试看

mysql max 与 group by 子句

在这个例子中:

  • 首先, 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)

试试看

mysql max 与having 子句示例

如果您想查看客户姓名而不是号码,可以将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 与内连接

在本教程中,您学习了如何使用 MySQL MAX()函数查找一组值中的最大值。

本教程有帮助吗?