今天看见同学去面试的面试题,查询出某个字段排名第二名的信息,自己就看看
如果是Oracle ,这不就是考察Oracle分页么,以Oracle的emp表为例,根据薪水排名,查询排名第二的员工信息:
select * from (select t.*, rownum rn from (select * from emp e order by sal desc,empno) t where rownum <= 2) A where A.rn >= 2
(注意Oracle rownum陷阱,不能对Oracle 的rownum 直接进行 rownum> rownum>= rownum = 操作,因为第一条不满足去掉的话,第二条的rownum又成了1,所以永远没有满足条件的记录。所以Oracle分页里边的select 先用 rownum <= xxx ,外边再rownum>=xxx
想要使用的话需要这样,再嵌套一层select :select A.* from (select e.*,rownum rn from emp e)A where A.rn>=13 )
还可以使用开窗函数 row_number() :开窗函数简介 http://www.cnblogs.com/lihaoyang/p/6756956.html
select * from (select e.*,row_number() over(order by sal desc) sal_sort from emp e)t where t.sal_sort=2
如果是mysql,就简单了,limit就行:limit 下标是从0开始的,limit 1,1 表示从第2个往后一个,就是第二名了
select * from tb_emp ORDER BY sal desc LIMIT 1,1