基于随机抽样的SQL划分
我有这样一个数据库: 我如何获得一个随机样本,例如纽约市的2行和伦敦的3行?有人知道一个简单而简短的代码吗 我正在考虑按城市顺序按分区使用行,但如何继续?一个选项使用行编号和新id 行编号随机排列具有相同城市的记录。然后,在外部查询中,我们使用条件表达式选择每个城市所需的记录数 这会给你一个随机选择。如果您想要任何记录,则无需使用newid:只需使用orderbyselectnull,这更便宜。您可以使用基于随机抽样的SQL划分,sql,sql-server,random,greatest-n-per-group,window-functions,Sql,Sql Server,Random,Greatest N Per Group,Window Functions,我有这样一个数据库: 我如何获得一个随机样本,例如纽约市的2行和伦敦的3行?有人知道一个简单而简短的代码吗 我正在考虑按城市顺序按分区使用行,但如何继续?一个选项使用行编号和新id 行编号随机排列具有相同城市的记录。然后,在外部查询中,我们使用条件表达式选择每个城市所需的记录数 这会给你一个随机选择。如果您想要任何记录,则无需使用newid:只需使用orderbyselectnull,这更便宜。您可以使用 您也可以使用此代码,无需分区: select * from (select Top 2
您也可以使用此代码,无需分区:
select * from
(select Top 2 City, Unit_price, newID() as t from Sales where City = 'Naypyitaw'
order by newID()) as tt
union
select * from (
select Top 3 City, Unit_price, newID() as t from Sales where City = 'Yangon'
order by newID()) as tt
随机样品和您的要求不匹配。那么你的实际目标是什么?你想从每组中随机抽取50%的行吗?我只想显示2行纽约市和3行伦敦市。但是这一行需要随机选择。谢谢,它有效。它们是没有子查询的其他方法吗?我不太喜欢子查询。这个TABLESAMPLE方法怎么样?@Freddy:其他使用union的方法需要在每个城市扫描表多次,因此效率较低。是的,这是真的。但结果总是不同的。我并不总是得到所要求的排。
(select somefields from yourtable tablesample(2 rows) where city = 'New York City')
union
(select somefields from yourtable tablesample(3 rows) where city = 'London')
select * from
(select Top 2 City, Unit_price, newID() as t from Sales where City = 'Naypyitaw'
order by newID()) as tt
union
select * from (
select Top 3 City, Unit_price, newID() as t from Sales where City = 'Yangon'
order by newID()) as tt