SQL分组获取随机记录

主要是利用row_number() over()函数以及DBMS_RANDOM.value产生的随机数大小排序进行,再对固定的排序序号进行统一取值,

select id,
       empno ,
       row_number() over(partition by empno order by DBMS_RANDOM.value) as row_num
  from emp t;

SCORE EMPNO ROW_NUM
493652 21092 1
492765 21092 2
430016 21097 1
44490 21097 2
22688 22527 1
4498 22527 2
82139 22527 3

如果要随机获取每一个员工其中的一次score,则可以将上面的的结果作为子查询,在ROW_NUM=1,就可以获取随机记录了

select score, empno
  from (select  score,
                empno,
               row_number() over(partition by staffid order by DBMS_RANDOM.value) as row_num
          from emp) t
 where t.row_num = 1;
SCORE EMPNO ROW_NUM
3652 21092 1
30016 21097 1
80329 22527 1
9219 22566 1
2956 23112 1
4052 23119 1
766 23164 1
这样,每次查询的结果都是随机的了,有可能相同,有可能不同。

如果不用分组,那就更简单了。

select * from (select * from emp order by dbms_random.value)      where rownum < 10
随机获取 9 个记录。






你可能感兴趣的:(SQL)