[Oracle] GREATEST()函数

GREATEST()是 Oracle 的一个非常有用的比较函数,它可以从一组表达式中找出最大的值

GREATEST()函数在处理多值比较、数据筛选和条件逻辑时特别实用

语法格式

sql 复制代码
GREATEST(expr1, expr2 [, expr3, ...])

参数说明

expr1, expr2, ...:要比较的表达式(至少需要两个参数),可以是列名、常量、函数或计算表达式

GREATEST()函数可以比较数值、日期或字符类型的值,并且所有比较的参数类型需保持相同

示例

sql 复制代码
-- 比较两个数值
SELECT GREATEST(10, 20) FROM dual;  -- 20

-- 比较多个数值
SELECT GREATEST(5, 10, 8, 3, 15) FROM dual;  -- 15

-- 与列数据比较
SELECT product_id, 
       price, 
       discount_price,
       GREATEST(price, discount_price) AS effective_price
FROM products;

-- 确保值不低于最小值
UPDATE employees
SET salary = GREATEST(salary, 5000)
WHERE department_id = 10;

-- 计算最高得分
SELECT player_name,
       GREATEST(score1, score2, score3) AS best_score
FROM game_results;

-- 与CASE表达式结合
SELECT product_id,
       CASE 
         WHEN GREATEST(price1, price2, price3) > 100 THEN '高价'
         ELSE '普通'
       END AS price_level
FROM products;

-- 生成销售报表,显示最高销售额
SELECT region,
       GREATEST(Q1_sales, Q2_sales, Q3_sales, Q4_sales) AS peak_sales
FROM regional_sales;

-- 比较日期
-- 结果: 2025-08-15
SELECT GREATEST(TO_DATE('2025-01-01', 'YYYY-MM-DD'),
                TO_DATE('2025-08-15', 'YYYY-MM-DD'),
                TO_DATE('2025-03-12', 'YYYY-MM-DD'))
FROM dual;

-- 比较字符串(按字母顺序)
SELECT GREATEST('Apple', 'Banana', 'Cherry') FROM dual;  -- 'Cherry'

-- 比较混合数据类型
-- Oracle会尝试隐式转换
SELECT GREATEST(100, '200') FROM dual;  -- 200(字符串'200'被转换为数字)
sql 复制代码
SELECT GREATEST(10, NULL) FROM dual;  -- NULL

SELECT GREATEST(NULL, NULL, NULL) FROM dual;  -- NULL

SELECT GREATEST(10, NULL, 20) FROM dual;  -- NULL

SELECT GREATEST(10, NULL, 20, NULL) FROM dual;  -- NULL

提示Tips

① GREATEST()函数的输入值为NULL,其输出值也为NULL

② 尽量比较相同数据类型的值,保持数据类型一致性,隐式转换可能导致意外结果或错误

③ 在WHERE子句中使用GREATEST()通常会使索引失效

sql 复制代码
-- 不推荐(索引可能无法使用)
SELECT * FROM table WHERE GREATEST(col1, col2) > 100;

-- 推荐写法
SELECT * FROM table WHERE col1 > 100 OR col2 > 100;
相关推荐
故乡dee云2 小时前
AWS 产品太多不会选?按“网站、数据库、文件、日志”4 类需求快速匹配
数据库·云计算·aws
曹牧4 小时前
C#:问号
前端·数据库·c#
奇树谦4 小时前
《现代 Key-Value 数据库原理:从 B+Tree 到 LSM Tree》-第五篇:现代数据库横向对比
数据库·lsm-tree
李白客4 小时前
分布式集群与数据库产业:从单机到集群的架构跃迁与市场重构
数据库·分布式·架构
福大大架构师每日一题5 小时前
Redis 8.10.0 正式发布:紧凑哈希、批量导入、备份恢复、流与时序能力全面升级
数据库·redis·哈希算法
雨晨源码(同名B站)5 小时前
基于深度学习YoloV11农业病害虫害检测系统 智慧农业信息化综合管理平台 (附源码+lw文档+ppt)
数据库·人工智能·深度学习·yolo·信息可视化
DBA小马哥6 小时前
向量数据库入门到进阶:Embedding、ANN算法与RAG落地的关键术语
数据库·算法·embedding
云和数据.ChenGuang6 小时前
fastapi项目拆分实战数据模型
java·服务器·数据库·人工智能·深度学习·fastapi·强化学习
祈禾6 小时前
Redis三大特殊数据类型
运维·服务器·数据库·redis·笔记·缓存
东方护航数据恢复(深圳)6 小时前
MySQL_Oracle数据库崩溃修复全攻略_东方护航数据恢复深圳店
数据库·mysql·oracle