SQL分组获取随机记录

SQL分组获取随机记录

2017-12-30 08:59:32 一木剑 阅读数 1038更多

分类专栏: SQL

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

本文链接:https://blog.csdn.net/qq_34226365/article/details/78936006

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


 
  1. select id,

  2. empno ,

  3. row_number() over(partition by empno order by DBMS_RANDOM.value) as row_num

  4. 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,就可以获取随机记录了


 
  1. select score, empno

  2. from (select score,

  3. empno,

  4. row_number() over(partition by staffid order by DBMS_RANDOM.value) as row_num

  5. from emp) t

  6. 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个记录。

原文地址:https://www.cnblogs.com/grj001/p/12223887.html