随机样本组

时间:2019-02-26 19:11:27

标签: sql sql-server

我有一个包含130万行的表。

我如何随机选择100行?

我的表名称是[三月超值邮件提供者受众群体],表中的属性是personal_id

我只希望它随机选择100行进行我正在运行的测试

3 个答案:

答案 0 :(得分:2)

人们在这里建议的NEWID技术可能是性能上的挑战,因为130万行中的每一行都将被分配一个NEWID,将对所有行进行排序,然后才返回前100名。

SQL Server使用表提示TABLESAMPLE提供了一种更为有效的行采样方法。例如,

select * from [March Value Mailer Offer Audience] TABLESAMPLE(100 ROWS);

查看更多信息here

HTH

答案 1 :(得分:1)

一种昂贵的方法是:

select top (100) t.*
from t
order by newid();

如果您要任意行,则可以执行以下操作:

select top (100) t.*
from t;

或者,一种既方便又随机的便捷解决方案:

select top (100) t.*
from t
where rand(checksum(newid())) < 0.001   -- about 1 in 1000 rows
order by newid();

这会将行缩减为大约1300(0.1%)行的随机子集,然后在其中随机选择。

答案 2 :(得分:0)

使用newid()

 if err != nil {
        return nil, fmt.Errorf("Error logging into AWS: %v", err.Error())
    }

但是,只有public static async void SaveFileAsync() { string File = @"c:\temp\TempData.csv"; for (int i = 0; i < 50; i++) { var DataPoint = new SensorData { Temp = GetNewRandom(22, 40), Humidity = GetNewRandom(25, 30), Pressure = GetNewRandom(90000, 110000) }; await WriteCSVLine(File, DataPoint); } } private static Task WriteCSVLine(string FilePath, SensorData data) { try { using (StreamWriter w = File.AppendText(FilePath)) { return w.WriteLineAsync(data.ToString()); } } catch (Exception ex) { Debug.WriteLine(ex.Message); throw; } } 会做您想做的事而无需任何排序:

select top (100) a.*
from [March Value Mailer Offer Audience] a
order by newid();