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产生的随机数大小排序进行,再对固定的排序序号进行统一取值,
-
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个记录。