【问题标题】:SQL random sampling into equal groupsSQL 随机抽样到相等的组
【发布时间】:2022-09-28 02:24:50
【问题描述】:

我需要使用表中的 SQL 将表中的用户随机抽样到 4 个相等的组中。为此,我做了以下事情:

  • 首先,使用 RANDOM() 函数将表中的所有用户随机化,然后使用它的结果与 NTILE() 函数将它们分成 4 个相等的两半,如下所示:
WITH randomised_users AS (
       SELECT * 
         FROM users_table
      ORDER BY RANDOM()
) SELECT *, 
         ntile(4) OVER(ORDER BY (SELECT 1)) AS tile_nr
    FROM randomised_users 

这种抽样方法是正确的,还是在由此创建的 4 个组中存在偏差?

    标签: sql snowflake-cloud-data-platform


    【解决方案1】:

    你所拥有的对我来说看起来不错。顺便说一句,您不需要子查询。这会很好

    select *, ntile(4) over (order by random())
    

    即使您提供随机种子,Snowflake 也不保证查询将重现相同的结果集,因此如果您计划重新使用它,请确保将任何中间结果集转储到临时表中。

    【讨论】:

      猜你喜欢
      • 2016-09-06
      • 2013-08-17
      • 2020-12-27
      • 2020-05-31
      • 1970-01-01
      • 2017-10-15
      • 1970-01-01
      • 1970-01-01
      • 2018-09-12
      相关资源
      最近更新 更多