【问题标题】:How to randomly select on a column in SQL如何在 SQL 中的列上随机选择
【发布时间】:2021-02-24 07:01:44
【问题描述】:

我在 redshift 中有一个表,其中有一个名为 ID 的列,其中包含数百万个不同的条目。但是,每个 ID 都可以跨行重复。我的表的一个例子是:

ID Color Age Height
A Blue 12 24
A Red 3 34
B Green. 6 26
B Blue 8 22
C White 6 34

我想选择一个预设数量 - 比如说 100,000 个不同的 ID,以及与这些 ID 匹配的所有行。因此,如果 ID 'A' 是随机选择的,我会取回 ID 中包含 'A' 的所有行 (2)。

关于如何做到这一点的任何建议?

【问题讨论】:

  • 如果一个 ID 不是唯一的,它真的是一个 ID 吗?听起来更像是外键

标签: sql amazon-redshift


【解决方案1】:

您可以使用join 并在子查询中选择适当的ID:

select t.*
from t join
     (select id
      from t
      group by id
      order by random()
      limit 1000000
     ) t1000000
     on t1000000.id = t.id;

您可能会发现避免这种排序会更快。例如,如果您想要 1% 的 id 样本,则改为:

select t.*
from t join
     (select id
      from t
      group by id
      having random() < 0.01
     ) t1000000
     on t1000000.id = t.id

【讨论】:

    【解决方案2】:

    我不知道红移所以请原谅我的无知,但你能做一个像这样的子选择:

        SELECT TOP 1
               ID
              ,CAST(RANDOM() * 100 As int) As rand_int
        FROM tbl_name
        ORDER BY rand_int
    

    使用它,根据 ID 列 INNER JOIN 您的主表?

    【讨论】:

      猜你喜欢
      • 2010-10-09
      • 2018-12-04
      • 2021-12-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多