今天看見同學去面試的面試題,查詢出某個字段排名第二名的信息,自己就看看
如果是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