MySQL MAX函数

时间:2019-11-20 08:52:16  来源:igfitidea点击:

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

MySQL MAX()函数简介

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

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

MAX(DISTINCT expression)

如果添加DISTINCT运算符,则MAX()函数将返回不同值的最大值,该最大值与所有值的最大值相同。
这意味着DISTINCT在MAX()函数中不起作用。

注意,DISTINCT在其他聚合函数(例如COUNT(),SUM()和AVG())中也有影响。

MySQL MAX()函数示例

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

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

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

SELECT MAX(amount)
FROM payments;

在此的示例MAX()函数检查付款表的金额列中的所有值以找到最大的金额。

B)通过WHERE子句使用MySQL MAX()函数

该语句使用MAX()函数查找2004年最大的付款:

SELECT 
    MAX(amount) largest_payment_2004
FROM
    payments
WHERE
    YEAR(paymentDate) = 2004;

在此示例中:

  • 首先,使用WHERE子句中的条件仅获取年份为2004的付款。
    我们使用YEAR()函数从付款日期中提取年份。

  • 然后,在SELECT子句中使用MAX()函数查找2004年最大的付款金额。

此图显示输出:

C)在子查询示例中使用MySQL MAX()函数

为了不仅获得最大的付款金额,而且要获得其他付款信息(例如客户编号,支票号码和付款日期),请在子查询中使用MAX()函数,如以下查询所示:

SELECT 
    *
FROM
    payments
WHERE
    amount = (SELECT 
            MAX(amount)
        FROM
            payments);

这个怎么运作。

  • 子查询返回所有付款中的最大金额。

  • 外部查询获取的金额等于子查询返回的最大金额的付款以及其他付款信息。

另一种不使用MAX()函数的方法是使用ORDER BY子句对结果集进行降序排序,并使用LIMIT子句获得结果集中的第一行,如下所示:

SELECT 
    *
FROM
    payments
ORDER BY amount DESC
LIMIT 1;

如果您在amount列上没有索引,则第二个带有LIMIT子句的查询会更快,因为它检查了付款表中的所有行,而第一个查询则检查了付款表中的所有行两次,第一次查询了付款表中的所有行。
子查询,另一个在外部查询中。

但是,如果为"数量"列建立索引,则第一个查询的执行速度更快。

D)使用MySQL MAX()和GROUP BY子句示例

要查找每个组的最大值,请使用MAX函数和GROUP BY子句。

该语句使用MAX()获得每个客户的最大付款:

SELECT 
    customerNumber, MAX(amount)
FROM
    payments
GROUP BY customerNumber
ORDER BY MAX(amount);

在此示例中:

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

如果要查看客户名称而不是数字,可以将付款表与客户表结合使用:

SELECT 
    customerName, 
    MAX(amount)
FROM
    payments
INNER JOIN customers USING (customerNumber)    
GROUP BY 
    customerNumber
HAVING 
    MAX(amount) > 80000
ORDER BY 
    MAX(amount);

这是输出:

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