抽样组而不是行

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 数据。它不会返回样本,因为要限制结果集,您需要通过wherehavingjoin 指定一些限制。如何在“类似”结果中仅获得组 AACC 您已经问过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)

不是抽样统计而是面向全体样本的统计啥意思

HIVE数据抽样

r R - 从数据帧中抽样行

R分层抽样(Stratified Sampling)

如何使用 Python 进行随机分层抽样(不是训练/测试拆分)?