[Q]隨機抽取前N條記錄的問題zt

orchidllh發表於2005-03-15

[A]8i以上版本
select * from (select * from tablename order by sys_guid()) where rownum < N;
select * from (select * from tablename order by dbms_random.value) where rownum< N;
注:dbms_random包需要手工安裝,位於$ORACLE_HOME/rdbms/admin/dbmsrand.sql
dbms_random.value(100,200)可以產生100到200範圍的隨機數

[Q]抽取從N行到M行的記錄,如從20行到30行的記錄
[A]select * from (select rownum id,t.* from table where ……  
and rownum <= 30) where id > 20;


[Q]怎麼樣實現分組取前N條記錄
[A]8i以上版本,利用分析函式
如獲取每個部門薪水前三名的員工或每個班成績前三名的學生。
Select * from  
(select depno,ename,sal,row_number() over (partition by depno
     order by sal desc) rn  
from emp)
    where rn<=3

[Q]如何取得一列中第N大的值?
[A]select * from  
(select t.*,dense_rank() over (order by t2 desc) rank from t)  
where rank = [$N]

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/51862/viewspace-180518/,如需轉載,請註明出處,否則將追究法律責任。

相關文章