抽样组而不是行
Posted
技术标签:
【中文标题】抽样组而不是行【英文标题】:sampling groups instead of rows 【发布时间】:2021-12-08 04:37:32 【问题描述】:我想根据组 ID (ColA) 而不是行进行随机选择。假设我的初始表是这样的:
+---------------------+
|ColA | ColB | ColC |
+---------------------+
| AA C 5 |
| AA C 8 |
| AA C 9 |
| BB D 3 |
| BB D 4 |
| CC E 1 |
| CC E 2 |
| CC E 3 |
| CC E 5 |
+---------------------+
我想得到这样的东西:
+---------------------+
ColA | ColB | ColC
+---------------------+
| AA C 5 |
| AA C 8 |
| AA C 9 |
| CC E 1 |
| CC E 2 |
| CC E 3 |
| CC E 5 |
+---------------------+
假设我想从 Col A 随机获取整个分组。我已经这样做了,但它给了我随机行而不是组
SELECT distinct ColA,ColB, ColC FROM TABLE
ORDER BY RAND()
LIMIT 20000
我会很感激有关如何实现它的任何线索。
【问题讨论】:
请澄清规则。您的查询将以随机顺序返回所有可能的ColA
数据。它不会返回样本,因为要限制结果集,您需要通过where
、having
、join
指定一些限制。如何在“类似”结果中仅获得组 AA
和 CC
?
您已经问过almost the same 的问题。目前还不是很清楚你想在这里实现什么。从提供的示例来看,SELECT * FROM TABLE WHERE ColA != 'BB'
应该可以解决问题。你能解释一下你想要达到的目标吗?
这能回答你的问题吗? Random sample groups instead of rows in SQL
不,不会这样做,因为这只是一个例子。我只想要来自 Col A 的所有组的样本。我认为我想要的输出很清楚我想要实现的目标
@TBA 不,它没有
【参考方案1】:
根据您的描述,您可以在子选择中使用单列查询:
SELECT *
FROM dataset
WHERE ColA IN (
SELECT *
FROM (
SELECT distinct ColA
FROM dataset
)
ORDER BY rand()
LIMIT 2
)
【讨论】:
以上是关于抽样组而不是行的主要内容,如果未能解决你的问题,请参考以下文章
R语言使用sample函数从dataframe中抽样指定个数的数据行并配置是否有放回抽样(Random samples)