Oracle 的 GREATEST
函数本身不支持自定义排序规则。GREATEST
函数用于返回一组表达式中的最大值,并且它遵循 Oracle 默认的排序规则。如果你需要使用自定义排序规则,可以考虑使用 CASE
语句或者在子查询中使用 ORDER BY
和 ROWNUM
来实现。
例如,假设你有一个表格 employees
,包含字段 employee_id
和 salary
,你想根据自定义的排序规则(例如,先按照工资降序排列,再按照员工ID升序排列)来获取每个部门的最高工资。你可以使用以下 SQL 语句:
SELECT department_id, employee_id, salary
FROM (
SELECT department_id, employee_id, salary,
ROW_NUMBER() OVER (PARTITION BY department_id ORDER BY salary DESC, employee_id ASC) as rank
FROM employees
) t
WHERE rank = 1;
这里我们使用了窗口函数 ROW_NUMBER()
来为每个部门的员工分配一个基于自定义排序规则的排名,然后在外层查询中选择排名为 1 的员工。