首页/数据/SQL 速查/GREATEST / LEAST 多值比较(NULL 规则不同)
函数速查60 条

GREATEST / LEAST 多值比较(NULL 规则不同)

在一组值里取较大者/较小者:多条候选取优场景常用;两库对 NULL 的处理完全相反,是迁移时的隐藏雷区。

SQL 速查数据更新于 2026-10-12

示例

示例
-- 三个值里取较大/较小
SELECT GREATEST(3, 9, 5), LEAST(3, 9, 5);   -- 9, 3
MySQL任一参数为 NULL,结果就是 NULL(不忽略)
PostgreSQL忽略 NULL 参数,只在全为 NULL 时返回 NULL
参数至少 2 个;类型需可比较
两库 NULL 语义不同:同一句 SELECT GREATEST(a, b) 在 MySQL 与 PostgreSQL 里可能给出不同答案,迁移前先核对数据中的空值率。

易错点

  • MySQL 里 GREATEST(a,b) 遇到 a 为 NULL 就返回 NULL,想忽略空值需先 COALESCE
  • 比较字符串与数字混合参数时隐式转换规则两库不同,建议显式 CAST 后再比较

数据来源与参考

  • MySQL 8.0 Reference Manual · GREATEST
  • PostgreSQL Documentation · Conditional Expressions
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌