LEAST() 函数详解(MySQL)
LEAST() 是 MySQL 中的一个标量函数,用于返回参数列表中的最小值。与聚合函数 MIN() 不同,LEAST() 直接比较多个值或列。
基本语法
sql
LEAST(value1, value2, value3, ...)
核心特性
返回所有参数中的最小值
可以接受 2 个或更多参数
参数可以是列名、常量、表达式
自动进行类型转换(按参数类型比较)
基本用法示例
1. 比较两个值
sql
SELECT LEAST(10, 3) AS result; -- 返回 3SELECT LEAST(-5, 10) AS result; -- 返回 -5SELECT LEAST(3.14, 2.71) AS result; -- 返回 2.71
2. 比较多个值
sql
SELECT LEAST(100, 50, 75, 25, 90) AS min_value; -- 返回 25
3. 比较字符串
sql
-- 按字典序比较SELECT LEAST('Apple', 'Banana', 'Cherry') AS min_str; -- 返回 'Apple'SELECT LEAST('abc', 'ABD', 'abd') AS min_str; -- 返回 'ABD'(大小写敏感)4. 比较日期
sql
SELECT LEAST('2024-01-15', '2023-12-20', '2024-02-01') AS earliest_date;-- 返回 '2023-12-20'在表中使用的实际例子
示例表结构
sql
CREATE TABLE scores ( student_id INT, math INT, english INT, science INT, art INT);INSERT INTO scores VALUES (1, 85, 92, 78, 88),(2, 45, 67, 72, 81),(3, 95, 88, 91, 79);
1. 找出每行的最低分
sql
SELECT student_id, math, english, science, art, LEAST(math, english, science, art) AS lowest_scoreFROM scores;
结果:
student_id | math | english | science | art | lowest_score |
1 | 85 | 92 | 78 | 88 | 78 |
2 | 45 | 67 | 72 | 81 | 45 |
3 | 95 | 88 | 91 | 79 | 79 |
2. 结合 WHERE 条件
sql
-- 找出有任何一科低于60分的学生SELECT student_id, math, english, scienceFROM scoresWHERE LEAST(math, english, science) < 60;
3. 使用表达式作为参数
sql
SELECT product_id, price, discount, LEAST(price, price * 0.8, price - 10) AS best_priceFROM products;
LEAST() vs MIN() 对比
| 特性 | LEAST() | MIN() |
|---|---|---|
| 类型 | 标量函数 | 聚合函数 |
| 用途 | 比较同一行的多个列 | 计算多行的最小值 |
| 参数 | 多个值/列 | 单个列 |
| 返回 | 每行一个结果 | 整个结果集一个值 |
sql
-- LEAST:横向比较(同一行)SELECT LEAST(col1, col2, col3) FROM table; -- 每行返回一个最小值-- MIN:纵向比较(不同行)SELECT MIN(col1) FROM table; -- 整个表返回一个最小值
实际应用场景
1. 价格计算(取最低价)
sql
SELECT product_name, LEAST(regular_price, sale_price, clearance_price) AS best_available_priceFROM products;
2. 库存预警(找出最低库存)
sql
SELECT product_id, LEAST(warehouse_a, warehouse_b, warehouse_c) AS min_inventoryFROM inventory;
3. 成绩评定(取最低分作为最终成绩)
sql
UPDATE exam_scoresSET final_score = LEAST(midterm, final, quiz_average);
4. 数据清洗(设置下限)
sql
-- 确保折扣价不低于成本价SELECT product_id, LEAST(selling_price, cost_price * 1.2) AS adjusted_priceFROM products;
与之前问题关联
回到您之前的问题,使用 LEAST() 可以大大简化求每行最小值的代码:
原代码(复杂数学公式)
sql
SELECT MIN(((number1+number2)-ABS(number1-number2))/2) AS '最小数'FROM (SELECT * FROM tb_min WHERE (number1>0 AND number2>0)) a;
使用 LEAST() 简化
sql
SELECT MIN(LEAST(number1, number2)) AS '最小数'FROM tb_min WHERE number1 > 0 AND number2 > 0;
注意事项
1. NULL 值处理
sql
SELECT LEAST(10, NULL, 5); -- 返回 NULL(任一参数为NULL,结果就是NULL)
解决方案:
sql
SELECT LEAST(10, COALESCE(col2, 999), 5);
2. 类型转换
sql
-- MySQL会自动转换类型进行比较SELECT LEAST('10', 5, '3'); -- 返回 3(转换为数字比较)SELECT LEAST('abc', '123', 'xyz'); -- 返回 '123'(字符串比较)3. 参数数量限制
MySQL 中最多可包含 256 个参数
相关函数
GREATEST():返回最大值(与 LEAST 相反)
MIN():聚合函数,返回列的最小值
COALESCE():返回第一个非 NULL 值
sql
-- GREATEST 示例SELECT GREATEST(10, 3, 8) AS max_value; -- 返回 10SELECT GREATEST('2024-01-01', '2024-02-01') AS latest_date; -- 返回 '2024-02-01'总结
LEAST() 是一个非常实用的函数,特别适合:
同一行多列的最小值比较
价格计算、库存预警等业务场景
简化原本需要用 CASE WHEN 的复杂逻辑
相比数学公式法,LEAST() 更加直观、简洁、易读,是现代 SQL 开发中的推荐做法