【问题标题】: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 不,它没有

标签: sql random pandas-groupby amazon-athena presto


【解决方案1】:

根据您的描述,您可以在子选择中使用单列查询:

SELECT *
FROM dataset
WHERE ColA IN (
        SELECT *
        FROM (
                SELECT distinct ColA 
                FROM dataset
            )
        ORDER BY rand()
        LIMIT 2
    )

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-05-31
    • 2021-12-05
    • 2013-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-06
    相关资源
    最近更新 更多