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

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

  • 首先 GREATEST(value1, value2, ...),这个函数比较的多个不同字段的数据的大小,而不是同一个字段下最大的数据。

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

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‘
  • 如果任何参数为NULL,则两个函数都将立即返回NULL,而不进行任何比较。
  • 如果在INTReal上下文中使用函数,或者所有参数都是整数值或Real值,那么它们将分别作为int和Real来比较。
  • 如果参数由数字和字符串组成,则函数将它们作为数字进行比较。
  • 如果至少一个参数是非二进制(字符)字符串,则函数将将参数作为非二进制字符串进行比较。
  • 在所有其他情况下,函数将参数作为二进制字符串进行比较

以下示例演示了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

原文地址:https://www.cnblogs.com/yuezc/p/12098400.html

时间: 2024-08-26 17:51:07

MySQL greatest()和least()函数与MAX()和MIN()函数的相关文章

python四个带 key 参数的函数(max、min、map、filter)

四个带 key 参数的函数: max()点击查看详细 min()点击查看详细 map()点击查看详细 filter()点击查看详细 1)max(iterable, key) key:相当于对可迭代对象iterable每个元素的预处理. #返回key参数中的匿名函数返回的值中最大一个所对应的iterable参数中的值. max('ah', 'bf', key=lambda x: x[1]) 2)min(iterable, key) 点击查看详细 3)map(iterable, key) 点击查看详

python内置函数中的zip,max,min函数例子

一:zip函数 print(list(zip(('a','b','c'),('1','2','3')))) print(list(zip(('a','b'),('1','2','3')))) print(list(zip(('a','b','c'),('1','2')))) p={'name':'jake','age':'20'} print(list(zip(p.keys(),p.values()))) print(list(zip(['a','b'],'sdfghh'))) 输出为:[('a

python学习-33 max和min函数的高级使用

1.简单比较 age_dic={'age1456':15,'age2':16,'xiaohong_age':12,'xiaoming_age4':18,'age5':10} print(max(age_dic)) # key值进行比较.比较时一位一位比较 print(max(age_dic.values())) # values 值比较 运行结果: xiaoming_age4 18 Process finished with exit code 0 2.高级方法 age_dic={'age145

oracle max()函数和min()函数

当需要了解一列中的最大值时,可以使用MAX()函数:同样,当需要了解一列中的最小值时,可以使用MIN()函数.语法如下. SELECT          MAX (column_name) / MIN (column_name) FROM            table_name 说明:列column_name中的数据可以是数值.字符串或是日期时间数据类型.MAX()/MIN()函数将返回与被传递的列同一数据类型的单一值. 实例7 MAX()函数的使用 查询TEACHER表中教师的最大年龄.实

python协程函数、递归、匿名函数与内置函数使用、模块与包

目录: 协程函数(yield生成器用法二) 面向过程编程 递归 匿名函数与内置函数的使用 模块 包 常用标准模块之re(正则表达式) 一.协程函数(yield生成器用法二) 1.生成器的语句形式 a.生成器相关python函数.装饰器.迭代器.生成器,我们是如何使用生成器的.一个生成器能暂停执行并返回一个中间的结果这就是 yield 语句的功能 : 返回一个中间值给调用者并暂停执行. 我们的调用方式为yeild 1的方式,此方式又称为生成器的语句形式. 而使用生成器的场景:使用生成器最好的场景就

Swift2.0语言教程之函数的返回值与函数类型

Swift2.0语言教程之函数的返回值与函数类型 Swift2.0中函数的返回值 根据是否具有返回值,函数可以分为无返回值函数和有返回值函数.以下将会对这两种函数类型进行讲解. Swift2.0中具有一个返回值的函数 开发者希望在函数中返回某一数据类型的值,必须要在函数声明定义时为函数设定一个返回的数据类型,并使用return语句进行返回.其中,return语句的一般表示形式如下: return 表达式 其中,表达式可以是符合Swift标准的任意表达式.而具有返回值的函数声明定义形式如下: fu

MySQL创建字段+数据处理函数+汇总数据(聚集函数)+分组数据

[0]README 0.1)本文部分文字描述转自"MySQL 必知必会",旨在review"MySQL创建字段+数据处理函数+汇总数据(聚集函数)+分组数据" 的基础知识: [1]创建计算字段 1)problem+solution 1.1)problem:存储在表中的数据都不是应用程序所需要的.我们需要直接从数据库中检索出转换,计算或格式化过的数据: 1.2)solution:这就是计算字段发挥作用所在了, 计算字段是运行时在 select语句内创建的: 2)字段定

43 MySQL视图、触发器、事务、存储过程、函数

视图 1.什么是视图 通过查询得到一张虚拟表,然后保存下来,下次直接使用即可 2.为什么要用视图 如需频繁使用一张虚拟表,可以不用重复查询 3.如何用视图 注意: 1)在硬盘中,视图只有表结构文件,没有表数据文件 2)视图通常是用于查询,尽量不要修改视图中的数据 create view teacher2course as select * from teacher inner join course on teacher.tid = course.teacher_id; -- 删除视图 drop

我的MYSQL学习心得(十) 自定义存储过程和函数

我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) 数据类型 我的MYSQL学习心得(五) 运算符 我的MYSQL学习心得(六) 函数 我的MYSQL学习心得(七) 查询 我的MYSQL学习心得(八) 插入 更新 删除 我的MYSQL学习心得(九) 索引 我的MYSQL学习心得(十一) 视图 我的MYSQL学习心得(十二) 触发器 我的MYSQL学习心得(十三) 权限管理 我的MYSQL学习