row_number()和rownum差不多,功能更强一点(可以在各个分组内从1开时排序)
rank()是跳跃排序,有两个第二名时接下来就是第四名(同样是在各个分组内)
rank()是跳跃排序,有两个第二名时接下来就是第四名(同样是在各个分组内)
解决方案 »
- 如何对“大字段”(如图片)进行批量移植操作
- 这两种oracle语句哪种效率高一些呢?
- Oracle参数说明
- oralce高手们帮我看看这个怎么查询
- 恢复当前联机日志出错
- oracle语句中是否是大小写敏感的。oracle在解析select field from table和SELECT FIELD FROM TABLE 这两个语句时有区别吗?
- opensolaris 安装oracle报错,大家帮帮忙了阿
- 关于to_char后的length()
- database link 有无超时之说?
- 控制文件和数据文件的SCN不一致,数据库打不开(ora-01190,ora-01110,system)
- 帮忙解释over的用法
- 急!关于基于函数的索引,我该如何写?
Select a.* , row_number() over(Order By field) rk From tablename a
)Where rk<=10 row_number() over (partition order by filed)row_number是分析函数.
就是说: tablename 按照field排序之后, row_number() 取值就是排序后的. 第一为1, 第二为2.
如获取每个部门薪水前三名的员工或每个班成绩前三名的学生。
Select * from
(select depno,ename,sal,row_number() over (partition by depno
order by sal desc) rn
from emp)
where rn<=38i以上版本,分析函数lag与lead可以提取后一条或前一天记录到本记录。
Select deptno,ename,hiredate,lag(hiredate,1,null) over
(partition by deptno order by hiredate,ename) last_hire
from emp
order by depno,hiredate
FUNCTION_NAME(<argument>,<argument>...)
OVER
(<Partition-Clause><Order-By-Clause><Windowing Clause>)select * from t;
x y
1 1
3 1
1 2
1 1
3 1select rank() over(order by x)a,x,y from t;
a x y
1 1 1
1 1 2
1 1 1
4 3 1
4 3 1select row_number() over(order by x)a,x,y from t;
a x y
1 1 1
2 1 2
3 1 1
4 3 1
5 3 1
http://61.144.28.248/dev/bbs_content.jsp?bbs_sn=7101&bbs_page_no=42&bbs_id=0060