2013-05-09 49 views
1

我想用Oracle選擇表格的60%處的行。我能找到60%的行編號爲:獲取表格的60%處的行

select round(count(*)*0.60) as sira from 
    (select to_date(time) as tarih,lenght as hiz from table order by length desc) 

我正在尋找該行的列數據爲60%。也就是說,所有行的60%應具有比選定行更高的長度。

例如,對於這樣的數據:

name time length 
r1  10:00 1 
r2  10:02 2 
r3  10:04 3 
... 
r10 10:20 10 

我在尋找,打印r4查詢

回答

2
select * 
from (
     select row_number() over (order by yt.length desc) as rn 
     ,  count(*) over() as cnt 
     ,  yt.* 
     from YourTable yt 
     ) SubQueryAlias 
where rn = round(cnt * 0.60) 

Example at SQL Fiddle.

(行60%通過降低 長度排序。)
+2

這將永遠不會返回任何行,因爲您無法在n> 1時使用rownum = n。請參閱http://stackoverflow.com/questions/855422/oracle-sql-w hy-does-query-select-from-records-where-rownum-5-and-rownum – 2013-05-09 11:05:33

+1

@FrankSchmitt:有趣的是,也許可以用'row_number()' – Andomar 2013-05-09 11:07:48

+0

來完成。或者,或者你從rownum返回rownum值內部查詢並使用該值在外部過濾,像select * from(選擇rownum作爲rn,... from ...)其中rn =(從yourtable選擇round(cnt * 0.60)。但我更喜歡使用窗口函數的方法。 – 2013-05-09 11:13:36