首页 > 解决方案 > 选择在 TSQL 中平衡的特定列中具有标签的数据子集

问题描述

我在一个表中有大约 4M 条记录。此表中的每条记录都是不同的。其中一列“标签”具有两个不同的值 L1 和 L2。我想随机选择 100000 条记录,这样 50% 的数据有标签 L1,其余的有 L2。

例如:如果下表是主表并且大约有 10 行

s_key  C1    C2    labels
s1     0.2   0.1    L1
s2     0.3   0.3    L1
s3     0.25  0.32   L2
s4     1.4   0.5    L1
s5     2.3   9.0    L1
s6     1.2   0.8    L1
s7     0.8   0.4    L1
s8     2.6   9.5    L2
s9     3.7   7.1    L2
s10    2.7   8.3    L2

我想从上表中随机选择 4 条记录,这样 50% 即 2 条记录的标签为 L1,2 条记录的标签为 L2,如下所示

s_key  C1    C2    labels
s1     0.2   0.1    L1
s2     0.3   0.3    L1
s3     0.25  0.32   L2
s10    2.7   8.3    L2

如何在 Tsql/Sql 中执行此操作?感谢任何输入。

标签: sqltsql

解决方案


你也可以使用这个:

SELECT TOP 50000 *
FROM table
WHERE labels = 'L1'
ORDER BY NEWID() 

UNION ALL

SELECT TOP 50000 *
FROM table
WHERE labels = 'L2' 
ORDER BY NEWID() 

推荐阅读