【问题标题】:get one random record per combination of two columns (one table)每两列(一张表)的组合得到一个随机记录
【发布时间】:2012-09-04 15:40:27
【问题描述】:

我有这张桌子

rss_user。您会看到帐户名称、应用程序名称和应用程序类型。

与 RSS_USER_NAME RSS_NAME RSS_TYPE

示例数据

tom@gmail.com   webapp4     webapps
tom@gmail.com   webapp6     webapps
tom@gmail.com   mswin3      windows
tom@gmail.com   mswin2      windows
sakur@gmail.com mswin2      windows
sakur@gmail.com webapp6     webapps

我希望从 rss_name 和 rss_type 的组合中获得一个随机帐户。 rss_name 和 rss_type 的每个组合都应该有一个随机帐户。

当前代码。完全没用:-(

SELECT *
  FROM (  SELECT    'SYNC rss_user WITH rss_user_name = "'
             || RSS_USER_NAME
             || '" , rss_name = "'
             || RSS_NAME
             || '" , rss_type = "'
             || RSS_TYPE
             || '";'
        FROM rss_user
    ORDER BY DBMS_RANDOM.VALUE)
 WHERE ROWNUM = 1

结果:

SYNC rss_user WITH rss_user_name = "tom@gmail.com" , rss_name = "webapp4" , rss_type = "webapps";

【问题讨论】:

    标签: sql oracle select random


    【解决方案1】:

    这是一种方法:

    SELECT *
      FROM (SELECT    'SYNC rss_user WITH rss_user_name = "'
                 || RSS_USER_NAME
                 || '" , rss_name = "'
                 || RSS_NAME
                 || '" , rss_type = "'
                 || RSS_TYPE
                 || '";',
                     seqnum = row_number() over (partition by rss_name, rss_type order by dbms_random.value)
             FROM rss_user
            ) t
     WHERE seqnum = 1
    

    即使用row_number() 和dbms_random.value 来随机选择一行。

    【讨论】:

    • 非常感谢。我这边只有很小的修正。
    【解决方案2】:

    This 是关于如何逐行生成随机数的精彩讨论。一旦你了解了如何做到这一点,你就可以这样做(伪代码):

    select rss_name, rss_type, max(rand) from
    (select rss_name, rss_type, <random number> as rand from rss_user) a
    group by rss_name, rss_type
    

    【讨论】:

    • 我认为提问者知道创建随机值,因为代码示例包含 DBMS_RANDOM.VALUE。你的回答没有回答任何问题。
    • 另外“按 rss_name 分组,rss_type”不起作用,因为我需要 rss_user_name。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-11
    • 1970-01-01
    • 2015-10-15
    • 1970-01-01
    • 2016-08-14
    • 1970-01-01
    相关资源
    最近更新 更多