如何在另一个 table 中采样记录数?
How do I sample the number of records in another table?
我有代码可以对 50,000 条随机记录进行抽样。即,
SELECT * FROM Table1
SAMPLE 50000;
行得通。但是,我真正想做的是对不同 table 中的记录数进行采样。即,
SELECT * FROM Table1
SAMPLE count(*) FROM Table2;
我收到一个错误。我究竟做错了什么?
这不像样本那样是随机的,所以请记住这一点。但是也不会有明显的模式,我相信它是由磁盘位置决定的(不要引用我的话)。
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
);
SELECT TOP 50000 * FROM Table1 ORDER BY NEWID()
我有代码可以对 50,000 条随机记录进行抽样。即,
SELECT * FROM Table1
SAMPLE 50000;
行得通。但是,我真正想做的是对不同 table 中的记录数进行采样。即,
SELECT * FROM Table1
SAMPLE count(*) FROM Table2;
我收到一个错误。我究竟做错了什么?
这不像样本那样是随机的,所以请记住这一点。但是也不会有明显的模式,我相信它是由磁盘位置决定的(不要引用我的话)。
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
);
SELECT TOP 50000 * FROM Table1 ORDER BY NEWID()