<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Dict.CN 在線詞典, 英語學習, 在線翻譯

    都市淘沙者

    荔枝FM Everyone can be host

    統計

    留言簿(23)

    積分與排名

    優秀學習網站

    友情連接

    閱讀排行榜

    評論排行榜

    Oracle中隨機抽取N條記錄

    工作中經常用到隨機數,比如隨機抽取獎券,隨機抽取某地區的客戶樣本等。在Oracle中可以非常方便地實現這個功能。

    方法1:使用SAMPLE()。

    使用sample的語法是:

    SAMPLE [ BLOCK ]
    (sample_percent)
    [ SEED (seed_value) ]

    BLOCK: 表示使用隨機塊例舉而不是隨機行例舉。

    sample_percent是隨機獲取一張表中記錄的百分比。比如值為10,那就是表中的隨機的百分之10的記錄。值必須大于等于.000001,小于100。

    seed表示從哪條記錄返回,類似于預先設定例舉結果,因而每次返回的結果都是固定的。該值必須介于0和4294967295之間。

    接下來舉例說明:

    SQL> create table zeeno as select * from dba_objects;

     

    Table created.

    SQL> select object_name from zeeno sample(10) where rownum=1;

    OBJECT_NAME
    -------------------------------------------------------------

    UET$

    SQL> /

    OBJECT_NAME
    -------------------------------------------------------------

    ICOL$

    上面的示例表示從表zeeno中隨機抽取10%的記錄,并從中選擇一條記錄。

    如果使用seed,則返回固定的集。

    1* select object_name from zeeno sample(10) seed(10) where rownum=1
    SQL> /

     

    OBJECT_NAME
    ---------------------------------------------------------------------

    PROXY_ROLE_DATA$

    SQL> /

    OBJECT_NAME
    ---------------------------------------------------------------------

    PROXY_ROLE_DATA$

    只所以建臨時表是因為如下原因:

    SQL> select object_name from dba_objects sample(10)where rownum=1;
    select object_name from dba_objects sample(10)where rownum=1
    *
    ERROR at line 1:
    ORA-01446: cannot select ROWID from, or sample, a view with DISTINCT, GROUP BY,
    etc.

    方法2:使用DBMS_RANDOM包。

    DBMS_RANDOM有兩種主要的使用方法,分別是DBMS_RANDOM.VALUE()和DBMS_RANDOM.RANDOM。

    SQL> select dbms_random.value() from dual;

     

    DBMS_RANDOM.VALUE()
    -------------------
    .638206012

    SQL> /

    DBMS_RANDOM.VALUE()
    -------------------
    .312828706

    SQL> select dbms_random.value(1,10) from dual

    DBMS_RANDOM.VALUE(1,10)
    -----------------------
    2.49371361

    SQL> /

    DBMS_RANDOM.VALUE(1,10)
    -----------------------
    1.6890498

    有了隨機數,抽取隨機記錄就是一件非常輕松的事情了:

    SQL> select * from (select object_name from zeeno
    2 order by dbms_random.random)
    3 where rownum=1;

     

    OBJECT_NAME
    -------------------------------------------------

    DBMS_JAVA_TEST

    SQL> /

    OBJECT_NAME
    -------------------------------------------------

    USER_SNAPSHOT_REFRESH_TIMES

    SQL> select * from (select object_name from zeeno
    1 order by ceil(dbms_random.value(1,3))
    2 )
    3* where rownum=1

    OBJECT_NAME
    ----------------------------------------------------------

    UNDO$

    SQL> /

    OBJECT_NAME
    ----------------------------------------------------------

    I_USER1

    通常情況下我更喜歡使用SAMPLE,因為更加方便。

    posted on 2007-12-04 17:22 都市淘沙者 閱讀(1543) 評論(0)  編輯  收藏 所屬分類: Oracle/Mysql/Postgres/

    主站蜘蛛池模板: 免费v片在线观看品善网| 亚洲好看的理论片电影| 亚洲日本天堂在线| 黄瓜视频高清在线看免费下载| 91久久亚洲国产成人精品性色| 麻豆精品不卡国产免费看| 日本免费网站在线观看| 亚洲国产成人片在线观看无码| 成人免费一区二区三区| 久久亚洲国产精品一区二区| 国产精品免费看久久久| 亚洲色图在线播放| 在线看片韩国免费人成视频| 亚洲色大情网站www| 免费国产高清视频| 91国内免费在线视频| 亚洲精品中文字幕无乱码| 国产成人午夜精品免费视频| 亚洲国产成人久久综合| 亚洲欧洲中文日韩久久AV乱码| 9久热这里只有精品免费| 亚洲黄网站wwwwww| 精品剧情v国产在免费线观看| 午夜免费国产体验区免费的| 国产精一品亚洲二区在线播放| 99热免费在线观看| 亚洲精品无码久久久久APP | 国产精品99爱免费视频| 久久被窝电影亚洲爽爽爽| 日本最新免费网站| 老司机午夜精品视频在线观看免费| 男人的好免费观看在线视频| 精品国产亚洲一区二区三区在线观看| 亚洲综合无码精品一区二区三区| 少妇无码一区二区三区免费| 亚洲精品无码久久久久APP| 亚洲老妈激情一区二区三区| 精品熟女少妇AV免费观看| 国产免费一区二区三区免费视频| 亚洲成人一级电影| 国产啪亚洲国产精品无码|