SQL分组获取随机记录

分类专栏: ​​SQL​​​

主要是利用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个记录。