您正在寻找最高分数,一行,所以使用 row_number():
select score, row_id, name
from (select t.*, row_number() over (order by score desc, row_id) rn from t)
where rn = 1
演示
您可以在示例中使用rank
and dense_rank
,但它们可以返回多行,例如当您(0.95, 501, 'PQR')
向数据添加行时。
keep dense_rank
通常在搜索值不是搜索条件时使用,例如,如果我们查找工作时间最长的员工的薪水:
max(salary) keep (dense_rank first order by sysdate - hiredate desc)
max
在这种情况下意味着如果有两个或两个以上的员工工作时间最长,但与我们拿最高工资的天数完全相同。
max(salary)
keep (dense_rank first order by sysdate - hiredate desc)
over (partition by deptno)
同上,但各部门工作时间最长员工的工资分别显示。您甚至可以使用空over()
来在单独的列中显示最长工作员工的工资,除了姓名、工资、雇用日期等其他数据。