我有一个具有以下结构的数据库/表:
年 | 年龄 | 性别 | 订单编号 |
---|---|---|---|
2012 | 18 | 米 | 4268 |
2021 | 75 | 米 | 7569 |
2015 | 56 | F | 5381 |
2018 | 二十九 | 米 | 2876 |
2014 | 33 | F | 3749 |
我想要实现的是,我希望随机抽取 400 条记录/表行以形成一个较小的样本,但我需要 200 条男性记录和 200 条女性记录。除此之外,我需要每条男性记录都给出一条具有相同年龄值的女性记录,因此我最终得到了 200 对结果 - 每对都有相同年龄的男性和女性。
我已经制作并尝试了以下代码:
DROP TABLE IF EXISTS #SampleTableM
DROP TABLE IF EXISTS #SampleTableF
SELECT TOP (200) [Year],[Age],[Gender],[OrderID]
INTO #SampleTableM
FROM [database.name]
WHERE Age <=90 AND Sex = 'M'
ORDER BY NEWID()
SELECT TOP (200) [Year],[Age],[Gender],[OrderID]
INTO #SampleTableF
FROM [database.name]
WHERE Age <=90 AND Sex = 'F'
ORDER BY NEWID()
SELECT * FROM #SampleTableM
UNION
SELECT * FROM #SampleTableF;
但是,这只会给我提供 200 个随机男性结果和 200 个随机女性结果,并且每个结果都没有与年龄相同的对立性别之一相匹配。
根据评论,我首先随机选择了 200 个男性样本,然后匹配与收集的 200 个男性样本相对应的女性性别的年龄。不确定您的输出应该是什么样子,因为您没有分享预期的输出,您可以根据需要调整输出中的列。
以下是一个例子
小提琴
编辑 :根据评论,我们可以使用 UNION ALL 在后续行中获得匹配对,然后按年龄、性别排序。每个性别的年龄分布可能相等,也可能不相等,但至少相似的年龄会出现在一起。
注意:当某个年龄段的男性和女性数量超过 2 时,从视觉上看,这可能仍然看起来不均匀。
小提琴
输出