SQL

SQL:如何从一个表中为另一行中的每一行获取随机的行数

发布于 2021-06-04 16:52:42

我有两个数据无关的表对于表A中的每一行,我想要例如表B中的3个随机行

使用游标很容易,但是速度很慢

那么我如何在单个语句中表达这一点以避免RBAR?

关注者
0
被浏览
97
1 个回答
  • 面试哥
    面试哥 2021-06-04
    为面试而生,有面试问题,就找面试哥。

    要获得介于0到(N-1)之间的随机数,可以使用。

    abs(checksum(newid())) % N
    

    这意味着要获得1-N的正值,您可以使用

    1 + abs(checksum(newid())) % N
    

    注意:RAND()不起作用-每个查询批处理一次,并且您在tableA的所有行都使用相同的值。

    查询:

    SELECT *
      FROM tableA A
      JOIN (select *, rn=row_number() over (order by newid())
              from tableB) B ON B.rn <= 1 + abs(checksum(newid())) % 9
    

    (假设您希望每个A最多有9个B随机行)



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看