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 的員工。