星期二, 8月 26, 2008

How to use Top in Oracle

今天要幫同事在Oracle裡面,
Select Top n * From [TABLE_NAME]
怎麼用都不行原來是…


Oracle 沒有這個 Top 這個關鍵字。
那要如何達成呢?

答案是利用rownum這東東!!

rownum代表著顯示出來的列數。
例如:
資料表欄位有:姓名, 性別,加入日期


執行:select * from 加入日期 asc

結果:

姓名, 性別,加入日期
Tom,男,2008-08-11
John,男,2008-08-13
Mary,女,2008-08-20
Joyce,女,2008-08-21
Joy,女,2008-08-30


則Tom,男,2008-08-11這筆資料的rownum就是1,
而Mary,女,2008-08-30的rownum就是3。
所以如果要使用類似Top 3(前3筆資料)的功能,
就是改寫成 rownum < 4的數字 ,
但是rownum是根據你所下的條件select資料而定的,
並不是真的Tom,男,2008-08-11有個欄位rownum存放1 。
再看下面另一例。

執行:select * from 加入日期 desc

結果:

Joy,女,2008-08-30
Joyce,女,2008-08-21
Mary,女,2008-08-20
John,男,2008-08-13
Tom,男,2008-08-11


這時Tom,男,2008-08-11這筆資料的rownum就是5,
而 Joy,女,2008-08-30的rownum就是1 ,
這樣懂了嗎?
所以要達成與Top 3的功能就要寫成 :


Select*From
(
--依想要出現資料的大小順序先排好
Select*From 加入日期 Desc
) rownum < 4

但是要注意似乎無法用rownum = 4 (等於某列)來顯示單筆資料




參考下列文章
http://blog.blueshop.com.tw/phoenixhann/archive/2007/12/14/53667.aspx
http://www.xxlinux.com/linux/article/development/database/20070530/8617.html

Analytics