基于随机抽样的SQL划分

基于随机抽样的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

我有这样一个数据库:

我如何获得一个随机样本,例如纽约市的2行和伦敦的3行?有人知道一个简单而简短的代码吗

我正在考虑按城市顺序按分区使用行,但如何继续?

一个选项使用行编号和新id

行编号随机排列具有相同城市的记录。然后,在外部查询中,我们使用条件表达式选择每个城市所需的记录数

这会给你一个随机选择。如果您想要任何记录,则无需使用newid:只需使用orderbyselectnull,这更便宜。

您可以使用


您也可以使用此代码,无需分区:

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