【问题标题】:Randomly pick one distinct row of every group?随机选择每组的一个不同的行?
【发布时间】:2021-01-04 22:29:04
【问题描述】:

假设我在 Oracle 中有这个 SQL:

 select field1,field2 from table where field2 in (32,421,5766) and .....

它通常会返回很多行。 如何从 field2 定义的每个组中选择 3 个随机行 ONE 并匹配其余条件

【问题讨论】:

    标签: sql oracle random greatest-n-per-group


    【解决方案1】:

    使用ROW_NUMBER 分析函数并给行随机排序:

    SELECT field1,
           field2
    FROM   (
      SELECT field1,
             field2,
             ROW_NUMBER() OVER ( PARTITION BY field2 ORDER BY DBMS_RANDOM.VALUE() )
               AS rn
      FROM   table_name
      WHERE  field2 IN (32, 421, 5766)
    )
    WHERE  rn = 1;
    

    其中,对于样本数据:

    CREATE TABLE table_name ( field1, field2 ) AS
    SELECT LEVEL,    1 FROM DUAL CONNECT BY LEVEL <= 10 UNION ALL
    SELECT LEVEL,   32 FROM DUAL CONNECT BY LEVEL <= 10 UNION ALL
    SELECT LEVEL,  421 FROM DUAL CONNECT BY LEVEL <= 10 UNION ALL
    SELECT LEVEL, 5766 FROM DUAL CONNECT BY LEVEL <= 10;
    

    可能(随机)输出:

    字段1 | FIELD2 -----: | -----: 3 | 32 6 | 421 7 | 5766

    db小提琴here

    【讨论】:

      猜你喜欢
      • 2014-06-05
      • 1970-01-01
      • 1970-01-01
      • 2013-04-09
      • 1970-01-01
      • 2012-06-04
      • 1970-01-01
      • 2013-09-03
      • 2021-02-24
      相关资源
      最近更新 更多