数据库
首页 > 数据库> > MySQL greatest()和least()函数与MAX()和MIN()函数

MySQL greatest()和least()函数与MAX()和MIN()函数

作者:互联网

下面的内容是个人学习记录,来自https://www.yiibai.com/mysql/greatest-least.html。请大佬勿喷,这里是要强调一点东西。

MySQL GREATEST和LEAST函数介绍

它跟MAX()与MIN()函数的区别就是,前面是比较多个字段(列)的最大值最小值,后面是只获取单个字段(列)的最大最小值。

GREATESTLEAST函数都使用N个参数,并分别返回最大和最小值。下面说明GREATESTLEAST函数的语法:

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

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

例如:运行以下语句会报错的。

1 SELECT
2     id,
3     `name`,
4     GREATEST(core) highCore
5 FROM
6     sys_menu;
[SQL]
SELECT
    id,
    `name`,
    GREATEST(core) highCore
FROM
    sys_menu;
[Err] 1582 - Incorrect parameter count in the call to native function 'GREATEST'

 

以下示例演示了GREATESTLEAST函数的工作原理。

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


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

 --  具体的如何避免下面的情况,请往下看。

MySQL GREATEST和最小值的例子

下面为了演示,我们来创建一个名称为:revenues的新表。

1 USE testdb;
2 
3 CREATE TABLE IF NOT EXISTS revenues (
4     company_id INT PRIMARY KEY,
5     q1 DECIMAL(19 , 2 ),
6     q2 DECIMAL(19 , 2 ),
7     q3 DECIMAL(19 , 2 ),
8     q4 DECIMAL(19 , 2 )
9 );

revenues表由company_id作为主键,其它四个列分别存储每季度公司的收入。

以下语句在revenues表中插入两行 -

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

要获得每个公司的最高和最低收入,可使用GREATESTLOWEST,如下查询语句:

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

执行上面查询语句,得到以下结果 -

+------------+--------+--------+
| company_id | low    | high   |
+------------+--------+--------+
|          1 | 100.00 | 130.00 |
|          2 | 250.00 | 310.00 |
+------------+--------+--------+
2 rows in set

如果任何参数为NULL,则GREATESTLEAST函数都返回NULL,这可能不是我们想要的。为了避免这种情况,可以使用IFNULL函数将NULL视为零来执行数字比较。

以下语句向revenues表中插入在q4列中带有NULL值的一条新行。

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

如果使用GREATESTLEAST函数来查询数据,则可以得到按预期设计的结果。

1 SELECT 
2     company_id,
3     LEAST(q1, q2, q3, q4) low,
4     GREATEST(q1, q2, q3, q4) high
5 FROM
6     revenues;

执行上面查询语句,得到以下结果 -

+------------+--------+--------+
| company_id | low    | high   |
+------------+--------+--------+
|          1 | 100.00 | 130.00 |
|          2 | 250.00 | 310.00 |
|          3 | NULL   | NULL   |
+------------+--------+--------+
3 rows in set
SQL

如上面查询所见,其ID=3的公司的最低值和最高值为NULL

为避免这种情况,您可以使用IFNULL函数,如下:

 1 SELECT 
 2     company_id,
 3     LEAST(IFNULL(q1, 0),
 4             IFNULL(q2, 0),
 5             IFNULL(q3, 0),
 6             IFNULL(q4, 0)) low,
 7     GREATEST(IFNULL(q1, 0),
 8             IFNULL(q2, 0),
 9             IFNULL(q3, 0),
10             IFNULL(q4, 0)) high
11 FROM
12     revenues;

执行上面查询语句,得到以下结果 -

+------------+--------+--------+
| company_id | low    | high   |
+------------+--------+--------+
|          1 | 100.00 | 130.00 |
|          2 | 250.00 | 310.00 |
|          3 | 0.00   | 120.00 |
+------------+--------+--------+
3 rows in set

标签:函数,MIN,IFNULL,MAX,LEAST,GREATEST,id,q4
来源: https://www.cnblogs.com/yuezc/p/12098400.html