使用Oracle分析函式隨機抽取N條記錄

dbasdk發表於2014-08-26
模擬一個歌曲表,有歌曲ID和作者ID
並且初始化一些資料

  1. create table music(
  2.     music_id int primary key,
  3.     userid int
  4. );
  5. insert into music(music_id)
  6. select rownum rn from dual connect by level<1000;
  7. update music set userid= mod(music_id,5);
  8. commit;
要求:
每個作者隨機抽取他的3個作品。

SQL如下

  1. select * from
  2. (
  3.     select music_id,userid,ROW_NUMBER() OVER (PARTITION BY userid ORDER BY dbms_random.random()) rn from music
  4. )
  5. where rn<=3;

第一次執行:


第二次執行:


這個方法只針對Oracle有效(使用了它的分析函式)



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

相關文章