我有一个包含130万行的表。
我如何随机选择100行?
我的表名称是[三月超值邮件提供者受众群体],表中的属性是personal_id
我只希望它随机选择100行进行我正在运行的测试
答案 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();