SQL学习(三):greatest()和least()函数(最大值和最小值)

GREATEST和LEAST函数的语法:
GREATEST(value1, value2, ...);
LEAST(value1,value2,...);

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

  1. 如果任何参数为NULL,则两个函数都将立即返回NULL,而不进行任何比较。
  2. 如果在INT或REAL上下文中使用函数,或者所有参数都是整数值或REAL值,那么它们将分别作为INT和REAL来比较。
  3. 如果参数由数字和字符串组成,则函数将它们作为数字进行比较。
  4. 如果至少一个参数是非二进制(字符)字符串,则函数将将参数作为非二进制字符串进行比较。
  5. 在所有其他情况下,函数将参数作为二进制字符串进行比较

例:
创建一个新表 test:

CREATE TABLE IF NOT EXISTS test (
company_id INT PRIMARY KEY,
q1 DECIMAL(19 , 2 ),
q2 DECIMAL(19 , 2 ),
q3 DECIMAL(19 , 2 ),
q4 DECIMAL(19 , 2 )
);
插入语句:

INSERT INTO test(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
test;

结果:

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

注:如果任何参数为NULL,则GREATEST和LEAST函数都返回NULL,这可能不是我们想要的。为了避免这种情况,可用case when 进行数据的过滤,给出一个指定的值,也可以使用IFNULL函数将NULL视为零来执行数字比较。

你可能感兴趣的:(sql)