MySQL查找最大值和最小值

简介:在本教程中,您将学习如何使用MySQL GREATEST和LEAST函数分别查找两个或多个字段的最大值和最小值。

MySQL GREATEST和LEAST函数简介

GREATEST和LEAST函数均采用N个参数,并分别返回最大值和最小值。
下面说明了GREATEST和LEAST函数的语法:

GREATEST(value1, value2, ...);
LEAST(value1,value2,...);

参数可能具有混合的数据类型。
以下比较规则适用于两个功能:

  • 如果任何参数为NULL,则这两个函数将立即返回NULL,而不进行任何比较。

  • 如果在INT或REAL上下文中使用函数,或者所有参数均为整数值或REAL值,则将它们分别比较为INT和REAL。

  • 如果参数同时由数字和字符串组成,则函数会将它们作为数字进行比较。

  • 如果至少一个参数是非二进制(字符)字符串,则函数会将参数作为非二进制字符串进行比较。

  • 在所有其他情况下,函数会将参数作为二进制字符串进行比较。

下面的示例演示了GREATEST和LEAST函数如何工作。

SELECT GREATEST(10, 20, 30),  -- 30
       LEAST(10, 20, 30); -- 10

SELECT GREATEST(10, null, 30),  -- null
       LEAST(10, null , 30); -- null

MySQL GREATEST和LEAST示例

让我们为演示创建一个新表。

CREATE TABLE IF NOT EXISTS revenues (
    company_id INT PRIMARY KEY,
    q1 DECIMAL(19 , 2 ),
    q2 DECIMAL(19 , 2 ),
    q3 DECIMAL(19 , 2 ),
    q4 DECIMAL(19 , 2 )
);

收入表包括company_id作为主键和四个列,用于存储每个季度的公司收入。

以下语句在收入表中插入两行。

INSERT INTO revenues(company_id,q1,q2,q3,q4)
VALUES (1,100,120,110,130),
       (2,250,260,300,310);

要获得每个公司的最高和最低收入,请使用GREATEST和LOWEST函数,如下所示:

SELECT 
    company_id,
    LEAST(q1, q2, q3, q4) low,
    GREATEST(q1, q2, q3, q4) high
FROM
    revenues;

如果任何参数为NULL,则GREATEST和LEAST函数都将返回NULL,这可能不是您期望的。
为避免这种情况,您可以使用IFNULL函数将NULL视为零以执行数字比较。

以下语句在q4列中使用NULL值将新行插入到收益表中。

INSERT INTO revenues(company_id,q1,q2,q3,q4)
VALUES (3,100,120,110,null);

如果使用GREATEST和LEAST函数查询数据,则会获得设计结果。

SELECT 
    company_id,
    LEAST(q1, q2, q3, q4) low,
    GREATEST(q1, q2, q3, q4) high
FROM
    revenues;

如您所见,公司ID 3的低值和高值为NULL。

为了避免这种情况,可以按如下方式使用IFNULL函数:

SELECT 
    company_id,
    LEAST(IFNULL(q1, 0),
            IFNULL(q2, 0),
            IFNULL(q3, 0),
            IFNULL(q4, 0)) low,
    GREATEST(IFNULL(q1, 0),
            IFNULL(q2, 0),
            IFNULL(q3, 0),
            IFNULL(q4, 0)) high
FROM
    revenues;

在本教程中,您学习了如何使用MySQL GREATEST和LEAST函数在值列表中查找最大和最小值。

日期:2019-11-20 08:52:17 来源:oir作者:oir