如何采样另一个表中的记录数?

时间:2018-08-02 19:49:09

标签: sql teradata sample

我有用于采样50,000条随机记录的代码。即

  SELECT * FROM Table1
  SAMPLE 50000;

那行得通。但是,我真正想做的是对另一个表中的记录数进行采样。即

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

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

2 个答案:

答案 0 :(得分:2)

这不是像样本一样随机的,因此请记住这一点。但是也不会出现明显的模式,我相信它是由磁盘位置决定的(请不要在上面引用我的意思)。

    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
             );

答案 1 :(得分:-1)

SELECT TOP 50000 * FROM Table1 ORDER BY NEWID()