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

时间:2018-06-05 11:50:03

标签: sql-server tsql

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

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

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

当我考虑在Case列表中执行SELECT语句时,会出现同样的问题。

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

有什么想法吗?

1 个答案:

答案 0 :(得分:5)

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

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

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