SQL查詢排名第二名的信息


今天看見同學去面試的面試題,查詢出某個字段排名第二名的信息,自己就看看

如果是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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM