MySQL查找最大值和最小值
时间:2019-11-20 08:52:17 来源:igfitidea点击:
简介:在本教程中,您将学习如何使用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函数在值列表中查找最大和最小值。