您好!欢迎访问家园网-www.jy.wang!

家园网

讲讲LEAST() 函数(MySQL

网络 作者:本站 点击:

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 开发中的推荐做法


标签: