首页 > 解决方案 > 如何对另一个表中的记录数进行采样?

问题描述

我有代码,我在其中抽样 50,000 条随机记录。IE,

  SELECT * FROM Table1
  SAMPLE 50000;

这样可行。但是,我真正想做的是对不同表中的记录数进行采样。IE,

  SELECT * FROM Table1
  SAMPLE count(*) FROM Table2;

我得到一个错误。我究竟做错了什么?

标签: sqlteradatasample

解决方案


这不像样本那样随机化,所以请记住这一点。但是也不会有明显的模式,我相信它是由磁盘位置决定的(不要引用我的话)。

    SELECT * 
      FROM Table1
   QUALIFY ROW_NUMBER() OVER
             ( PARTITION BY 1
                   ORDER BY 1
             ) <= 
             ( SELECT COUNT(*)
                 FROM Table2
             );

更好的方法

    SELECT TMP.* -- Or list the columns you want with "rnd" 
      FROM ( SELECT RANDOM(-10000000,10000000) rnd,
                    T1.*
               FROM Table1 T1
           ) TMP
   QUALIFY ROW_NUMBER() OVER
             ( ORDER BY rnd
             ) <= 
             ( SELECT COUNT(*)
                 FROM Table2
             );

推荐阅读