第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何在排序后限制Oracle查詢返回的行數(shù)?

如何在排序后限制Oracle查詢返回的行數(shù)?

慕雪6442864 2019-05-30 13:28:38
如何在排序后限制Oracle查詢返回的行數(shù)?有沒有辦法Oracle查詢表現(xiàn)為它包含MySQL limit條款?在……里面MySQL我能做到select * from sometableorder by name limit 20,10要獲得第21行到第30行(跳過前20行,給出下10行)。屬性之后選擇行。order by所以它實際上是從第20個名字開始的,按字母順序排列。在……里面Oracle,人們唯一提到的就是rownum偽列,但它是計算出來的。以前 order by,這意味著:select * from sometablewhere rownum <= 10order by name將返回按名稱排序的10行隨機集,這通常不是我想要的。它也不允許指定偏移量。
查看完整描述

4 回答

?
MM們

TA貢獻1886條經(jīng)驗 獲得超2個贊


從Oracle 12c R1(12.1)開始,?a?行限制子句。它不使用熟悉的LIMIT語法,但是它可以通過更多的選項來更好地完成工作。

要回答最初的問題,下面是一個查詢:

SELECT?*?FROM???sometableORDER?BY?name
OFFSET?20?ROWS?FETCH?NEXT?10?ROWS?ONLY;

設置

CREATE?TABLE?rownum_order_test?(
??val??NUMBER);INSERT?ALL
??INTO?rownum_order_testSELECT?levelFROM???dualCONNECT?BY?level?<=?10;COMMIT;

桌子里有什么?

SELECT?valFROM???rownum_order_testORDER?BY?val;

???????VAL----------
?????????1
?????????1
?????????2
?????????2
?????????3
?????????3
?????????4
?????????4
?????????5
?????????5
?????????6
?????????6
?????????7
?????????7
?????????8
?????????8
?????????9
?????????9
????????10
????????1020?rows?selected.

先得N

SELECT?valFROM???rownum_order_testORDER?BY?val?DESCFETCH?FIRST?5?ROWS?ONLY;

???????VAL----------
????????10
????????10
?????????9
?????????9
?????????85?rows?selected.

先得N行,如果NTH行有領(lǐng)帶,把所有系好的行

SELECT?valFROM???rownum_order_testORDER?BY?val?DESCFETCH?FIRST?5?ROWS?WITH?TIES;

???????VAL----------
????????10
????????10
?????????9
?????????9
?????????8
?????????86?rows?selected.

x行百分比

SELECT?valFROM???rownum_order_testORDER?BY?valFETCH?FIRST?20?PERCENT?ROWS?ONLY;

???????VAL----------
?????????1
?????????1
?????????2
?????????24?rows?selected.

使用偏移量,對分頁非常有用。

SELECT?valFROM???rownum_order_testORDER?BY?val
OFFSET?4?ROWS?FETCH?NEXT?4?ROWS?ONLY;

???????VAL----------
?????????3
?????????3
?????????4
?????????44?rows?selected.

您可以將偏移量與百分比結(jié)合起來。

SELECT?valFROM???rownum_order_testORDER?BY?val
OFFSET?4?ROWS?FETCH?NEXT?20?PERCENT?ROWS?ONLY;

???????VAL----------
?????????3
?????????3
?????????4
?????????4
?????????4?rows?selected.



查看完整回答
反對 回復 2019-05-30
?
呼如林

TA貢獻1798條經(jīng)驗 獲得超3個贊

您可以為此使用子查詢,如下所示

select?*from??(?select?*?
??from?emp?
??order?by?sal?desc?)?where?ROWNUM?<=?5;

更新:為了限制下界和上界的結(jié)果,事情會變得更加臃腫。

select?*?from?(?select?a.*,?ROWNUM?rnum?from?
??(?<your_query_goes_here,?with?order?by>?)?a?
??where?ROWNUM?<=?:MAX_ROW_TO_FETCH?)where?rnum??>=?:MIN_ROW_TO_FETCH;

更新2:從Oracle 12c(12.1)開始,有一種限制行或以偏移開始的語法。

SELECT?*?FROM???sometableORDER?BY?name
OFFSET?20?ROWS?FETCH?NEXT?10?ROWS?ONLY;
查看完整回答
反對 回復 2019-05-30
?
忽然笑

TA貢獻1806條經(jīng)驗 獲得超5個贊

我對以下方法進行了一些性能測試:

阿斯湯姆

select * from (
  select a.*, ROWNUM rnum from (
    <select statement with order by clause>
  ) a where rownum <= MAX_ROW) where rnum >= MIN_ROW

分析性

select * from (
  <select statement with order by clause>) where myrow between MIN_ROW and MAX_ROW

短替代

select * from (
  select statement, rownum as RN with order by clause) where a.rn >= MIN_ROW and a.rn <= MAX_ROW

結(jié)果

表有1000萬條記錄,排序位于未編入索引的日期時間行中:

  • “解釋計劃”顯示了所有三個選擇的相同值(323168)
  • 但是獲獎者是AskTom(分析人員緊隨其后)。

選擇前10行需要:

  • AskTom:28-30秒
  • 分析:33-37秒
  • 短選項:110-140秒

選擇在100,000至100,010之間的行:

  • AskTom:60秒
  • 分析:100秒

選擇9,000,000至9,000,010之間的行:

  • AskTom:130秒
  • 分析:150秒


查看完整回答
反對 回復 2019-05-30
?
海綿寶寶撒

TA貢獻1809條經(jīng)驗 獲得超8個贊

只有一個嵌套查詢的解析解決方案:

SELECT * FROM(
   SELECT t.*, Row_Number() OVER (ORDER BY name) MyRow FROM sometable t) WHERE MyRow BETWEEN 10 AND 20;

Rank()可以代替Row_Number()但是,如果名稱存在重復值,則可能返回的記錄比您預期的要多。


查看完整回答
反對 回復 2019-05-30
  • 4 回答
  • 0 關(guān)注
  • 2157 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號