如何获取特定数据分组的随机样本

SSi*_*ngh 1 t-sql sql-server

我有数千行数据.其中两列称为Area和Sub Area.每个区域有大约4,5个或更多子区域.

我想为每个区域和子区域选择一个随机的记录样本,例如前十名,但不能想到如何有效或快速地做到这一点.

我曾经考虑过UNION每次选择每个区域和子区域,但我必须这样做120个UNION语句,因为有120行不同的区域和子区域.

当我考虑Case在SELECT列表中做声明时,同样的问题也存在.

我想也许我可以使用CTE或WHILE LOOP以某种方式但没有太多运气.可以在这里使用Window函数吗?

有任何想法吗?

PSK*_*PSK 5

您可以尝试以下方法为每个子区域选择随机的10条记录.

select * 
from   (select *, 
               row_number() 
                 over( 
                   partition by subarea 
                   order by newid()) RN 
        from   yourtable) T 
where  rn <= 10 
Run Code Online (Sandbox Code Playgroud)

在上面的查询中,order by newid()将为您提供随机记录,并partition BY subarea为每个子区域生成不同的rownumber.